【问题标题】:Count appearances of value in second column based on unique value in first column根据第一列中的唯一值计算第二列中值的出现次数
【发布时间】:2019-10-09 19:06:58
【问题描述】:

解释这一点的最简单方法是在 Oracle SQL 中给出此表...

+-----------------+------------+
| COUNTRY         | VALUE      |  
+-----------------+------------+
| England         | A          |
| England         | A          |
| England         | A          |
| England         | B          |
| England         | B          |
| France          | A          |
| France          | A          |
| France          | B          |
+-----------------+------------+

我将如何生成此结果,即 COUNTRY 列中唯一值的 A 和 B 的计数

+-----------+------------+------------+
| COUNTRY   | COUNT(A)   | COUNT(B)   |   
+-----------+------------+------------+
| England   | 3          | 2          |
| France    | 2          | 1          |
+-----------+------------+------------+

我确定这已经被回答了,我只是不知道如何问这个问题。 谢谢

【问题讨论】:

  • 做一个 GROUP BY。使用 case 表达式进行条件聚合。
  • 等等,如果后面有人插入“England, C”,预期的结果是什么?
  • 我只想计算“A”和“B”的出现次数。 'C' 两者都不算。
  • 然后按照我最初的建议去做。

标签: sql oracle pivot


【解决方案1】:
select country,
       sum( case when value = 'A' then 1 else 0 end ) numA,
       sum( case when value = 'B' then 1 else 0 end ) numB
  from table
 group by country

是条件聚合的一个例子

【讨论】:

    【解决方案2】:

    使用PIVOT:

    Oracle 设置

    CREATE TABLE table_name ( COUNTRY, VALUE ) AS
    SELECT 'England', 'A' FROM DUAL UNION ALL
    SELECT 'England', 'A' FROM DUAL UNION ALL
    SELECT 'England', 'A' FROM DUAL UNION ALL
    SELECT 'England', 'B' FROM DUAL UNION ALL
    SELECT 'England', 'B' FROM DUAL UNION ALL
    SELECT 'France',  'A' FROM DUAL UNION ALL
    SELECT 'France',  'A' FROM DUAL UNION ALL
    SELECT 'France',  'B' FROM DUAL;
    

    查询

    SELECT *
    FROM   table_name
    PIVOT ( COUNT(*) FOR value IN ( 'A' AS "COUNT(A)", 'B' AS "COUNT(B)" ) )
    

    输出

    国家 |计数(一个)|计数(B) :-------- | --------: | --------: 英格兰 | 3 | 2 法国 | 2 | 1

    db小提琴here

    【讨论】:

      猜你喜欢
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多