สิบคำตอบที่ไม่ถูกลบ; ส่วนใหญ่ไม่ทำในสิ่งที่ผู้ใช้ร้องขอ คำตอบส่วนใหญ่อ่านคำถามผิดโดยคิดว่ามีผู้ใช้ 58 คนในแต่ละเมืองแทนที่จะเป็น 58 คนโดยรวม แม้แต่น้อยที่ถูกต้องก็ยังไม่เหมาะสม
mysql> flush status;
Query OK, 0 rows affected (0.00 sec)
SELECT province, total_cities
FROM ( SELECT DISTINCT province FROM canada ) AS provinces
CROSS JOIN ( SELECT COUNT(*) total_cities FROM canada ) AS tot;
+---------------------------+--------------+
| province | total_cities |
+---------------------------+--------------+
| Alberta | 5484 |
| British Columbia | 5484 |
| Manitoba | 5484 |
| New Brunswick | 5484 |
| Newfoundland and Labrador | 5484 |
| Northwest Territories | 5484 |
| Nova Scotia | 5484 |
| Nunavut | 5484 |
| Ontario | 5484 |
| Prince Edward Island | 5484 |
| Quebec | 5484 |
| Saskatchewan | 5484 |
| Yukon | 5484 |
+---------------------------+--------------+
13 rows in set (0.01 sec)
SHOW session status LIKE 'Handler%';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Handler_commit | 1 |
| Handler_delete | 0 |
| Handler_discover | 0 |
| Handler_external_lock | 4 |
| Handler_mrr_init | 0 |
| Handler_prepare | 0 |
| Handler_read_first | 3 |
| Handler_read_key | 16 |
| Handler_read_last | 1 |
| Handler_read_next | 5484 | -- One table scan to get COUNT(*)
| Handler_read_prev | 0 |
| Handler_read_rnd | 0 |
| Handler_read_rnd_next | 15 |
| Handler_rollback | 0 |
| Handler_savepoint | 0 |
| Handler_savepoint_rollback | 0 |
| Handler_update | 0 |
| Handler_write | 14 | -- leapfrog through index to find provinces
+----------------------------+-------+
ในบริบทของ OP:
SELECT town, total_users
FROM ( SELECT DISTINCT town FROM canada ) AS towns
CROSS JOIN ( SELECT COUNT(*) total_users FROM canada ) AS tot;
เนื่องจากมีเพียงหนึ่งแถวจากtot
ที่CROSS JOIN
ไม่เป็นที่มากมายในขณะที่มันอาจจะเป็นอย่างอื่น
รูปแบบปกติแทนCOUNT(*)
COUNT(town)
หลังหมายถึงการตรวจสอบtown
ว่าไม่เป็นโมฆะซึ่งไม่จำเป็นในบริบทนี้