SQL按查询分组。骨料

时间:2019-10-31 10:20:21

标签: sql postgresql group-by postgresql-9.5

您能帮我按组查询吗? 我有一个像下面的桌子

Country State      SomeType
UK      England    Yes
UK      Wales      No
UK      Scotland   MayBe
Germany Bavaria    Yes
Germany Bremen     Yes

我需要将每个国家/地区标记为是,否,可能是或混合类型。

如果所有州均为“是”,则该国家将为“是”,如果所有“否”,则该国家将为“否”,如果所有州均为“可能是”,则该国家将为“可能是” 但是,如果不同州的SomeType不同,则应将其标记为“混合”

在上述情况下,我应该将输出显示为

Country Type
UK      Mixed
Germany Yes

这只是一个虚构的示例,因为我在这里不能给出真正的要求。很抱歉,如果有人反对称威尔士为州而不是州。

4 个答案:

答案 0 :(得分:1)

demo:db<>fiddle

您可以将数组聚合与<mat-form-field> <mat-select (selectionChange)="changeMySelection($event)" [value]="myList"> // your options .... </mat-select> </mat-form-field> 一起使用,然后使用array_agg()运算符检查数组值:

ALL

答案 1 :(得分:1)

您可以进行聚合:

select country, (case when count(distinct sometype) > 1 
                      then 'mixed' 
                      else max(sometype)
                 end) as Type
from table t
group by country;

答案 2 :(得分:0)

您可以使用聚合和条件表达式:

select 
    country,
    case 
        when count(*) filter(where sometype = 'No') = 0 then 'Yes'
        when count(*) filter(where sometype = 'Yes') = 0 then 'No'
        else 'Mixed'
    end "type"
from mytable
group by country

答案 3 :(得分:0)

您可以将case..when表达式与聚合一起使用:

select country, 
       case when sum(case when sometype = 'Yes' then 1 end)=count(*) then max(sometype)
            when sum(case when sometype = 'No' then 1 end)=count(*) then max(sometype)
            when sum(case when sometype = 'MayBe' then 1 end)=count(*) then max(sometype)  
            else
               'Mixed'  
            end as type
  from tab
 group by country

Demo