【问题标题】:SQL Having count distinct with two columnsSQL有两列不同的计数
【发布时间】:2021-08-12 06:24:57
【问题描述】:

为简单起见,我在此示例中使用 AdventureWorks 数据库:

SELECT p.Title
FROM Person.Person p
GROUP BY p.Title
HAVING COUNT(DISTINCT p.LastName) > 1

我很难弄清楚如何将名字添加到姓氏到DISTINCT,因此不同的计数将基于这两个列而不仅仅是姓氏。问题是我在不同于COUNT DISTINCT (p.Title here) 的列上分组。

有什么想法吗?

谢谢

【问题讨论】:

    标签: sql-server tsql


    【解决方案1】:

    @GordonLinoff 所说的是一种解决方法,它在这种情况下确实有效,但不一定有效。如果您有日期或数字,它也不起作用。

    更正确的做法是先按FirstNameLastName 分组,然后再在Title 上方分组:

    SELECT p.Title
    FROM (
        SELECT DISTINCT p.Title, p.LastName, p.FirstName
        FROM Person.Person p
    ) p
    GROUP BY p.Title
    HAVING COUNT(*) > 1;
    

    【讨论】:

    【解决方案2】:

    因为count(distinct) 在 SQL Server 中不接受多个参数,所以解决方法是将它们连接在一起:

    HAVING COUNT(DISTINCT CONCAT(p.LastName, ' ', p.FirstName)) > 1
    

    【讨论】:

    • 你为什么不能先group by p.Title, p.LastName, p.FirstName 然后distinct p.Title
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 2018-12-16
    相关资源
    最近更新 更多