【问题标题】:Count occurrences in SQL计算 SQL 中的出现次数
【发布时间】:2020-07-01 12:47:13
【问题描述】:

我有一个包含以下数据的表格

| id | type |
-------------
| 1  | a    |
| 1  | b    |
| 1  | a    |
| 2  | a    |
| 2  | b    |
| 3  | a    |

我想知道每个 ID 每种类型出现的次数

| id | a | b |
| 1  | 2 | 1 |
| 2  | 1 | 1 |
| 3  | 1 | 0 |

SQL 中有没有办法(类似于数据透视表)

【问题讨论】:

  • 是的,有办法。您的值是否限制为 (a, b) 还是应该是动态的?
  • 限小集(

标签: sql select count pivot


【解决方案1】:

我会推荐条件聚合。这是一个跨数据库解决方案,比供应商特定的解决方案更灵活(并且至少同样高效):

select
    id,
    sum(case when type = 'a' then 1 else 0 end) a,
    sum(case when type = 'b' then 1 else 0 end) b
from mytable
group by id

【讨论】:

    【解决方案2】:

    在 MS SQL Server 上,您可以使用类似的东西(示例数据由 values() 构造函数提供)(我无法说出其他 SQL 风格):

    select * from (
        select id, t
        from (
            values 
                (1, 'a'),
                (1, 'b'),
                (1, 'a'),
                (2, 'a'),
                (2, 'b'),
                (3, 'a')
        ) z(id, t)
    ) x
    pivot(count(t) for t in (a, b)) as y
    

    【讨论】:

      猜你喜欢
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-07
      • 2021-05-21
      • 1970-01-01
      相关资源
      最近更新 更多