我的 MySQL 表 country_phone_codes 看起来像这样
id country_code area_code name
------------------------------------------------------------
1 | 93 | 93 | AFGHANISTAN
2 | 93 | 9370 | AFGHANISTAN - MOBILE
3 | 93 | 9375 | AFGHANISTAN - MOBILE
4 | 355 | 355 | ALBANIA
5 | 355 | 35568 | ALBANIA - MOBILE - AMC
6 | 213 | 213 | ALGERIA
7 | 213 | 2131 | ALGERIA - CAT
------------------------------------------------------------
这些只是 28000 多条记录中的一小部分。我正在尝试制定一个查询,为我提供这样的结果-
country_code name
-----------------------------
93 | AFGHANISTAN
355 | ALBANIA
213 | ALGERIA
-----------------------------
通过使用 SELECT DISTINCT(country_code) FROM country_phone_codes ORDER BY country_code LIMIT 0,260
,我能够获得不同的国家代码。但是如何获取相应的国家/地区名称?
最佳答案
答案很简单,使用 GROUP BY
:
SELECT country_code,MIN(name)
FROM country_phone_codes
GROUP BY country_code;
DISTINCT
函数和 ORDER BY
对于 GROUP BY
不是必需的。由于最初的问题专门与 MySQL 相关,因此 MIN()
聚合函数不是必需的,如果满足以下所有条件,则没有它您可能会看到更好的性能:
- 服务器是MySQL
- 存储引擎是InnoDB
- 示例数据的第一列是主键,条目遵循小样本建议的相同顺序,即国家/地区名称出现在组中所有其他名称之前。
这是有效的,因为 InnoDB 存储引擎将按主键的顺序扫描,对于非聚合列,它将使用它找到的第一个值。
关于php - 带有 DISTINCT 关键字的 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9596806/