mysql - SQL 分组合并未按预期工作

标签 mysql sql

我有以下 MySQL 表(图像):

+----+------------+-----------------------+
| id | gallery_id | path                                                                                                    |
+----+------------+-----------------------+
| 58 |       NULL | 58.jpg 
| 59 |       NULL | 59.jpg 
| 66 |          9 | 9-001.jpg 
| 67 |          9 | 9-002.jpg 
| 68 |         10 | 10-001.jpg 
| 69 |         10 | 10-002.jpg 
...

我想选择 gallery_id 为空的行,或者如果不为空,则按 gallery_id 对其进行分组。 所以预期的结果是:

+----+------------+-----------------------+
| id | gallery_id | path                                                                                                    |
+----+------------+-----------------------+
| 58 |       NULL | 58.jpg 
| 59 |       NULL | 59.jpg 
| 66 |          9 | 9-001.jpg 
| 68 |         10 | 10-001.jpg 
...

我尝试使用coalesce函数来实现这个结果:

select * from `images` group by coalesce(gallery_id, id);

但它仅返回 gallery_id 为 null 的行。 请告诉我我做错了什么?提前致谢。

最佳答案

你的要求没有意义。 GROUP BYSELECT * 是没有意义的,因为不清楚大多数列值来自哪里。

您似乎想要确定优先级。 。 。每个 NULL 一行,然后每个画廊一行。

我建议:

select i.*
from images i
where i.gallery_id is null or
      i.id in (select min(i2.id) from images i2 group by i2.gallery_id);

额外的好处是,这是标准 SQL,应该适用于任何数据库。

关于mysql - SQL 分组合并未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40058730/

相关文章:

sql - 如何获得可链接的标签?

sql - Cognos Report Studio 版本 10.2.1 中格式化日期提示出现问题

MySQL自动转换为小写

mysql - SQL 将值拆分为多行

mysql - SQL MAX 和 GROUP BY 与 WHERE

php - 显示数据库中 mm/dd/yy 日期为 "today"或更大的所有结果

mysql - 应返回多个的单个数组

MySql用户输入限制

mysql - 获取表格行数的最有效方法

php - 使用 PHP (PDO) 在 HTML 图像标记中显示来自 mysql 数据库的图像 (blob)