回答

收藏

在使用“逐个汇总”时区分NULL。

技术问答 技术问答 187 人阅读 | 0 人回复 | 2023-09-12

当我使用group by ... with rollup查询以下命令:  {" i# I- [+ s) k
select a,b,sum(c) from [table] group by a,b with rollup;我在查询的PK(即分组依据列)中的重复行(我认为是):
9 I: z" k( o! K' o    ------ ------ -------- | a    | b    | sum(c) | ------ ------ -------- | NULL | NULL |     13 || NULL |    1 |      4 || NULL |    3 |     8 || NULL |    4 |      9 || NULL | NULL |     34 ||    1 |    3 |     17 ||    1 |    4 |   NULL ||    1 |   17 |     2 ||    1 | NULL |     19 ||    2 | NULL |      6 ||    2 |    1 |     17 ||    2 |    3 |     17 ||    2 | NULL |     40 ||    4 |   17 |     2 ||    4 | NULL |     2 ||    5 | NULL |     11 ||    5 |    6 |      7 ||    5 | NULL |     18 ||   13 |    4 |     2 ||   13 | NULL |     2 ||   14 |   41 |     3 ||   14 | NULL |     3 ||   18 |    1 |     2 ||   18 | NULL |     2 ||   41 |    2 |     17 ||   41 | NULL |     17 |…更多行跟随…; J+ j/ q( Y' X4 }6 a" _; y& O
如何区分(NULL,NULL,13)从(NULL,NULL,34)?% p* R- j- ~; u  P
也就是说,如何区分因基础数据而为空的行和因汇总而添加为空的行?(请注意,还有更多的例子-(2,NULL,6)和(2,NULL,40))" G0 _+ T, f$ `3 S
                                                               
8 j* e8 {  b  j4 n& s. s# G5 O    解决方案:                                                               
/ l5 P2 q- ~1 f                                                                好问题。我能想到的一个选择是:
! L! s  C$ q7 j6 u' |- Fselect COALESCE(a,-1) AS a,COALESCE(b,-1) AS b,sum(c) from [table] group by COALESCE(a,-1),COALESCE(b,-1) with rollup;
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则