[英]SQL group by coalesce not working as expected
我有以下MySQL表( images
):
+----+------------+-----------------------+
| 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为null的行,或者如果不是null则按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的行。 告诉我我在做什么错? 提前致谢。
您可以使用带子选择和分组依据的when
select * from `images`
where (gallery_id, id ) in (select gallery_id, min(id)
from `images`
where gallery_id is not null
group by gallery_id)
SELECT * FROM `images` where gallery_id is not null group by gallery_id
UNION
SELECT * FROM `images` where gallery_id is null
您的要求没有道理。 带有SELECT *
GROUP BY
是没有意义的,因为不清楚大多数列值来自何处。
您似乎想确定优先级。 。 。 每个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,可以在任何数据库中使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.