Sql 尽管Group by表达式上的值不同,但仍对查询项进行分组
我试图找到一种方法,根据以下3列对表中的项进行分组 初始表:Sql 尽管Group by表达式上的值不同,但仍对查询项进行分组,sql,postgresql,amazon-redshift,Sql,Postgresql,Amazon Redshift,我试图找到一种方法,根据以下3列对表中的项进行分组 初始表: _id | ind_cel_phone | ind_home_phone ------------------------------------ 1 | TRUE | FALSE 1 | FALSE | FALSE 2 | TRUE | FALSE 3 | TRUE | FALSE 4 | TRUE
_id | ind_cel_phone | ind_home_phone
------------------------------------
1 | TRUE | FALSE
1 | FALSE | FALSE
2 | TRUE | FALSE
3 | TRUE | FALSE
4 | TRUE | FALSE
2 | FALSE | FALSE
5 | TRUE | TRUE
6 | TRUE | TRUE
1 | FALSE | TRUE
我期待的结果是:
_id | ind_cel_phone | ind_home_phone
------------------------------------
1 | TRUE | TRUE
2 | TRUE | FALSE
3 | TRUE | FALSE
4 | TRUE | FALSE
5 | TRUE | TRUE
6 | TRUE | TRUE
注意:
_id | ind_cel_phone | ind_home_phone
------------------------------------
1 | TRUE | FALSE
1 | FALSE | FALSE
2 | TRUE | FALSE
3 | TRUE | FALSE
4 | TRUE | FALSE
2 | FALSE | FALSE
5 | TRUE | TRUE
6 | TRUE | TRUE
1 | FALSE | TRUE
- _id=1得到三行,第一行为TRUE-FALSE,第二行为FALSE-FALSE,第三行为FALSE-TRUE,结果为TRUE-TRUE
- _id=2得到两行,第一行为TRUE-FALSE,第二行为FALSE-FALSE,结果为TRUE-FALSE
选择
_身份证
,ind_cel_电话
,ind_home_电话
从基表
分组依据_id
,ind_cel_电话
,ind_home_电话
由于值不同,我的结果表与初始结果表相同,而不是预期结果
有什么方法可以将它们分组以获得预期的结果吗?应该这样做:
select _id, bool_or(ind_cel_phone), bool_or(ind_home_phone)
from base_table
group by _id
应该这样做:
select _id, bool_or(ind_cel_phone), bool_or(ind_home_phone)
from base_table
group by _id
步骤1:按id分组,因为您希望每个id有一行作为结果。步骤1:按id分组,因为您希望每个id有一行作为结果。为什么不使用
MAX()
?ANSI/ISO SQL方式,并且应该是可移植的。@jarlh。我在Postgres中得到这个错误:“错误:函数max(布尔值)不存在”。老实说,我也倾向于把它写成count(*)filter(其中bool\u col)>0
,但是bool\u or()
和bool\u and()
确实更方便。为什么不改用MAX()
?ANSI/ISO SQL方式,并且应该是可移植的。@jarlh。我在Postgres中得到这个错误:“错误:函数max(布尔值)不存在”。老实说,我也倾向于将其写成count(*)filter(其中bool\u col)>0
,但是bool\u或()
和bool\u和()
确实更方便。