You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中GROUP BY非统计列时如何对两列进行COUNT DISTINCT统计

SQL需求实现方案

你提到的分组列和统计列不需要一致的顾虑是多余的,COUNT DISTINCT的统计范围为每个分组内的行,只需要统计分组内的对应字段即可,不需要和GROUP BY的字段相同,以下是不同场景的实现方式:

  • 如果你使用支持多列COUNT DISTINCT语法的数据库(如PostgreSQL、MySQL 8.0+),可以直接写为:
SELECT p.Title
FROM Person.Person p
GROUP BY p.Title
HAVING COUNT(DISTINCT (p.LastName, p.FirstName)) > 1
  • 如果你使用SQL Server(AdventureWorks为SQL Server官方示例库)或者需要兼容所有SQL方言,可以使用拼接唯一分隔符的方式,注意分隔符要选择不会出现在姓名字段中的字符,避免拼接歧义:
SELECT p.Title
FROM Person.Person p
GROUP BY p.Title
HAVING COUNT(DISTINCT CONCAT(p.LastName, '||', p.FirstName)) > 1
  • 无歧义的通用兼容写法,先对全量数据做姓名+分组列去重,再分组统计:
SELECT Title
FROM (
    SELECT DISTINCT Title, LastName, FirstName
    FROM Person.Person
) t
GROUP BY Title
HAVING COUNT(*) > 1

内容的提问来源于stack exchange,提问作者JanT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 16:27:03