Sql 尽管Group by表达式上的值不同,但仍对查询项进行分组

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

我试图找到一种方法,根据以下3列对表中的项进行分组

初始表:

_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
其中,如果有两行或多行具有相同的_id,但其ind_*列具有不同的值,则真值具有优先级

我试过这样的方法:

选择
_身份证
,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和()
确实更方便。