簡體   English   中英

SQL Group by Coalesce無法按預期工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM