【问题标题】:Duplicate rows that belong to multiple groups before group by在分组依据之前属于多个组的重复行
【发布时间】:2020-03-18 21:07:41
【问题描述】:

假设我有一张客户表,我想根据他们的名字和姓氏对他们进行分组,然后得到每个组的平均年龄。

但是,我的规则并不相互排斥。例如:

  • 名字以字母“A”开头
  • 姓氏以字母“A”开头

还有一些客户:

id   first_name    last_name    age  
1    Ava           Adams        36
2    Alexander     Williams     44

第一个客户同时匹配两个规则,第二个客户只匹配第一个规则。

每组平均年龄的预期结果应该是:

  • 第 1 组(Ava 和 Alexander)40 人
  • 第 2 组 (Ava) 为 36

但更重要的是,我真的很想将客户分组如下(计算可用于聚合的组字段):

Ava            …        Group 1
Ava            …        Group 2 
Alexander      …        Group 2 

如何使用一个 SQL 查询来做到这一点?

【问题讨论】:

    标签: sql database group-by pivot


    【解决方案1】:

    考虑使用条件聚合:

    select
        avg(case when first_name like 'A%' then age end) avg_age_first_name_A
        avg(case when last_name  like 'A%' then age end) avg_age_last_name_A
    from mytable
    where first_name like 'A%' or last_name like 'A%'
    

    编辑:另一方面,如果您只是想生成两个组,一个选项是union all:

    select t.*, 'group 1' grp from mytable t where first_name like 'A%'
    union all select t.*, 'group 2' from mytable t where last_name like 'A%'
    

    【讨论】:

    • 谢谢!我已经编辑了这个问题。事实上,我真的很想得到不同的组,以便使用 group by 进行聚合。这就像我必须复制属于多个组的行。
    • @GhizlaneAdarrab:这听起来与你原来的问题完全不同......我相应地编辑了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 2014-11-05
    • 2012-10-07
    • 2012-04-22
    相关资源
    最近更新 更多