根据第一列中的唯一值计算第二列中值的出现次数

Posted

技术标签:

【中文标题】根据第一列中的唯一值计算第二列中值的出现次数【英文标题】: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' 两者都不算。 然后按照我最初的建议去做。 【参考方案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

【讨论】:

以上是关于根据第一列中的唯一值计算第二列中值的出现次数的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark:如何根据另一列中的匹配值从数组中的第一次出现中选择直到最后的值

合并第二列到最后一列以获取第一列中的重复项

如何根据另一列中值的单一出现使一列中的所有值相同?

在python中,我如何对一列中每个值与另一列中的值发生的次数(多少行)建立矩阵?

如果第二列值在SQL中不相同,则计算一列中的不同值

EXCEL如何把第二列的数据按照第一列数据排序,且第二列的数据少于第一列?