sql - 单列 SQL 的多次计数
问题描述
我目前正在运行如下查询:
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 与 Code 列并排,并且只为 Code 的每次迭代显示一行。如下所示:
+-------+-----------+-----------+------+
| 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
完整解决方案:
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
结果:
| | ContactID | Code | |
|---|-----------|-------|---|
| 1 | 111 | abcd2 | 2 |
| 3 | 222 | abcd1 | 4 |
推荐阅读
- java - 使用侦听器类获取活动用户数
- docker - 无法启动 docker 容器并运行命令 OCI Runtime Create Failed
- c# - 如何使用相机 xamarin Forms android 拍摄多张照片
- xamarin.ios - Xamarin iOS 应用程序在使用 AssociatedObject 为 UIAlertController 设置 AutomationId 时崩溃 - objc_getAssociatedObject
- php - Emoji 从 Angularjs $http 到 PHP json_decode 并存储在 mySQL
- php - 如何在不阻止其他订阅者的情况下阻止任意订阅者?
- c - 如何检查二进制文件是否包含在另一个文件中?
- python - 是否有可能以任何方式来自网站的反向电子邮件混淆器?
- typescript - 从方法访问 vue 组件中的数据
- postgresql - 是否可以在 ecto 的 many_to_many 关联中添加其他字段?