php - 带有 DISTINCT 关键字的 MySQL 查询

标签 php mysql

我的 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/

相关文章:

php - 如何转换 htmlentities 符号中的阿拉伯字母?

php - 如何在SuiteCRM字段中添加自动增量

mysql - 自动统计mysql表中1-n个实例的个数

PHP 或 MySQL 不会更新数据库

python - mysql-python的pip安装抛出clang错误

php - 提交后在下拉列表中显示所选值

mysql - 将 SQL 脚本转换为 MySQL 脚本

php - 高容量共享媒体服务器PHP/mySQL重命名文件的实用方法

php - 加入 codeigniter 返回多个值

php - 向从数据库填充的表添加删除按钮