如何在SQL中计算唯一值对的数量?

29

使用以下 SQL 语句,可以获取给定列中所有唯一值及其计数:

select column, count(column) as count 
         from table group by column order by count desc;

如何获取所有唯一值的对并计数?例如,如果我有一个包含名字和姓氏两列的表格,我可能会得到以下结果:

名字 | 姓氏 | 计数

John | Smith | 42

John | Johnson | 39

David | Smith | 37

等等...

我能在基本的SQL中完成这个任务吗?我通常使用MySQL,但我假设您提供的任何解决方案都可以转换为任何数据库。

4个回答

35

你差不多做对了... 你只需要再添加一个额外的 GROUP BY 列,像这样:

SELECT [first_name], [last_name], COUNT(*) AS [Count] 
FROM [Table]
GROUP BY [first_name], [last_name]
ORDER BY [Count] DESC;

23

如果您只想知道有多少个不同的配对组合,您可以更简单地完成此操作。不需要使用 GROUP BY 子句。

SELECT COUNT(DISTINCT first_name, last_name) AS count_names FROM Table

10
至少在 PostgreSQL 中,这是无效的。 - Ulysse BN
1
对于DB2,这个查询可以工作:SELECT COUNT(*) from (SELECT distinct first_name,last_name FROM Table) - Nim J
这适用于Postgres:select COUNT(distinct p.id) from Pet p. - Enrico Giurin
使用哪种方言进行翻译? - CervEd

11

在 group by 子句中使用多个列。

select first_name, last_name, count(*) as count from table group by first_name, last_name

0
SELECT first_name, last_name, COUNT(distinct last_name) AS c
FROM ttable
GROUP BY first_name, last_name
HAVING c > 999
ORDER BY c DESC 

在MYSQL中添加DISTINCT将实现此目的。

谢谢。

HAVING may require the aggregation instead of the alias, ie HAVING COUNT(...) > 999 - CervEd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接