gpt4 book ai didi

sql - 单列 SQL 上的多个计数

转载 作者:行者123 更新时间:2023-12-02 06:27:42 26 4
gpt4 key购买 nike

我目前正在运行如下查询:

SELECT a.ID, a.ContactID, a.Code, 
FROM tableA a
JOIN (SELECT ContactID, Code
FROM tableA
WHERE ContactID IS NOT NULL
GROUP BY Code, ContactID
HAVING COUNT(Code) > 1) b
ON (a.Code = b.Code AND a.ContactID = b.ContactID)
WHERE a.ContactID IS NOT NULL
ORDER BY a.Code

这将返回如下所示的数据:

table : a    
+-------+-----------+-----------+
| ID | ContactID | Code |
+-------+-----------+-----------+
| 1 | 111 | abcd2 |
| 2 | 111 | abcd2 |
| 3 | 222 | abcd1 |
| 4 | 222 | abcd1 |
| 5 | 222 | abcd1 |
| 6 | 222 | abcd1 |
+-------+-----------+-----------+

如您所见,我得到的 ContactID 具有不止一个相同的代码。

问题是,我不想要所有这些输出(真正的表要大得多)。我想要一个 COUNT 沿着代码列并排,并且只为代码的每次迭代显示一行。像下面这样:

 +-------+-----------+-----------+------+
| ID | ContactID | Code |COUNT |
+-------+-----------+-----------+------+
| 1 | 111 | abcd2 | 2 |
| 3 | 222 | abcd1 | 4 |
+-------+-----------+-----------+------+

如果能对此提供任何帮助,我希望我已经充分解释了我的问题。如果没有,请询​​问更多信息,如果之前已经回答过,请指出那个方向。

谢谢。

最佳答案

你的解决方案和其他答案太复杂了,当你简单地聚合 HAVING Count(x) > 1 时,你不需要自连接:

SELECT MIN(ID), ContactID, Code, COUNT(Code) AS [COUNT]
FROM tableA
WHERE ContactID IS NOT NULL
GROUP BY Code, ContactID
HAVING COUNT(Code) > 1

完整解决方案:

SQL Fiddle

CREATE TABLE TableA
([ID] int, [ContactID] int, [Code] varchar(5))
;

INSERT INTO TableA
([ID], [ContactID], [Code])
VALUES
(1, 111, 'abcd2'),
(2, 111, 'abcd2'),
(3, 222, 'abcd1'),
(4, 222, 'abcd1'),
(5, 222, 'abcd1'),
(6, 222, 'abcd1')
;

查询 1:

SELECT min(id), ContactID, Code, count(Code) as [COUNT]
FROM tableA
WHERE ContactID IS NOT NULL
GROUP BY Code, ContactID
HAVING COUNT(Code) > 1

Results :

|   | ContactID |  Code |   |
|---|-----------|-------|---|
| 1 | 111 | abcd2 | 2 |
| 3 | 222 | abcd1 | 4 |

关于sql - 单列 SQL 上的多个计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52185158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com