sql - 查找具有相同值的 ID 的计数
问题描述
我想计算与其他 ID 具有相同值(Drops)的所有 ID。例如,下图显示 ID 1 和 3 有 A 掉落,因此查询会计算它们。同样,ID 7 和 18 有 B 下降,因此查询将计算另外两个 ID,总计 4 个 ID 共享相同的值,这就是我的查询将返回的内容。
+------+-------+
| ID | Drops |
+------+-------+
| 1 | A |
| 2 | C |
| 3 | A |
| 7 | B |
| 18 | B |
+------+-------+
我尝试了几种方法,但以下查询是我最后一次尝试。
With cte1 (Id1, D1) as
(
select Id, Drops
from Posts
),
cte2 (Id2, D2) as
(
select Id, Drops
from Posts
)
Select count(distinct c1.Id1) newcnt, c1.D1
from cte1 c1
left outer join cte2 c2 on c1.D1 = c2.D2
group by c1.D1
如果全部写出,结果将是单值输出,但查询应选择的记录应如下所示:
+------+-------+
| ID | Drops |
+------+-------+
| 1 | A |
| 3 | A |
| 7 | B |
| 18 | B |
+------+-------+
任何建议都会很棒。谢谢
解决方案
您可以使用 aCTE
生成Drops
具有多个对应ID
值的值列表,然后JOIN
查找具有多个 Post 值Posts
的所有行:Drops
WITH CTE AS (
SELECT Drops
FROM Posts
GROUP BY Drops
HAVING COUNT(*) > 1
)
SELECT P.*
FROM Posts P
JOIN CTE ON P.Drops = CTE.Drops
输出:
ID Drops
1 A
3 A
7 B
18 B
如果需要,您可以计算这些帖子的总数(或按Drops
价值分组):
WITH CTE AS (
SELECT Drops
FROM Posts
GROUP BY Drops
HAVING COUNT(*) > 1
)
SELECT COUNT(*) AS newcnt
FROM Posts P
JOIN CTE ON P.Drops = CTE.Drops
输出
newcnt
4
推荐阅读
- python - 创建绘图的 Pytest 测试函数
- javascript - 在搜索结果中包含图像的 Javascript 代码
- c - 为什么标准规定 C 中结构、枚举和联合的标记存在三种可能的命名空间,而实际上它们只有一种?
- json - 使用杰克逊子类型时如何避免获得带有随机信息的额外字段?
- postgresql - docker compose ignoring env vars when creating the container for postgres
- mysql - 如何使用 node-red 从数据库中提取数据
- node.js - 在设置关联时定义要加入的列
- java - Android Paho Mqtt - close() 与 unregisterResources() - OutOfMemoryError
- c# - 如何在 C# 中创建列表变量?
- email - 从我的域中删除亚马逊的入站 smtp