回答

收藏

MySQL Group By跳过对空值的分组

技术问答 技术问答 256 人阅读 | 0 人回复 | 2023-09-14

select * from dc_deal group by collection_id在collection_id列中,我有 (1、3、3、4、4、5NULL,NULL)值    。上述查询将返回带有
3 e$ V7 W: z% X8 B% H: ~9 ?(1,2,3,4,NULL)的    行,但我想跳过对的NULL值的分组需要类似 (1,2,3,4,NULL,NULL)的结果
" _4 y* d2 [- c+ b4 R, F( z                                                               
! O9 }" h% A. D$ q/ Y! s    解决方案:                                                               
9 E3 `* c) a: t7 u  D                                                                如果表中有一个唯一的列(或一组列),则可以添加另一个表达式GROUP BY。7 C1 c% Z1 ^4 l4 e3 w
如果collection_id为null ,表达式需要为每行返回一个唯一的值。否则,它会返回一个常数。3 e1 k! }3 j- ]8 s1 O
假设我们id表中有一个唯一的列,所以我们可以做这样的事情:
, f6 Z, f  r1 S4 c* O% Z$ {... GROUP BY collection_id,IF(collection_id IS NULL,id,0)当不为null时,in第二种表达式GROUPBY回到常数。但是,当collection_id为null它将为每一行返回一个唯一的值。``collection_id
6 q3 {& ]$ ?/ N- R* p0 ^/ m. m请注意,id这只是表中唯一列的引用。主键是一个不错的选择。如果我们在单列中没有唯一的索引,那么我们可以重复我们唯一约束中的每一列,或者确保每一行中唯一的任何表达式集。- G, Q" z7 \) l# {
... GROUP BY collection_id  IF(collection_id IS NULL,col1,'')  IF(collection_id IS NULL,col2,NULL)  IF(collection_id IS NULL,col3,collection_id)或者,我们可以用表达式生成一个唯一的值:3 z2 J2 M2 X4 ~+ _5 Y4 g! B4 M
... GROUP BY IFNULL(collection_id,UUID())
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则