sql - 计数具有唯一字段值的记录
问题描述
源表
假设我有一个名为MyTable
内容的表:
+----------+------+
| Category | Code |
+----------+------+
| A | A123 |
| A | B123 |
| A | C123 |
| B | A123 |
| B | B123 |
| B | D123 |
| C | A123 |
| C | E123 |
| C | F123 |
+----------+------+
我正在尝试计算Code
每个类别独有的值的数量。
期望的结果
对于上面的示例,结果将是:
+----------+-------------+
| Category | UniqueCodes |
+----------+-------------+
| A | 1 |
| B | 1 |
| C | 2 |
+----------+-------------+
因为C123
是 独有的A
,D123
是 独有的B
, E123
&F123
是 独有的C
.
我试过的
我可以C
使用以下查询获得单个类别(例如)的结果:
SELECT COUNT(a.Code) AS UniqueCodes
FROM
(
SELECT MyTable.Code
FROM MyTable
WHERE MyTable.Category = "C"
) a
LEFT JOIN
(
SELECT MyTable.Code
FROM MyTable
WHERE MyTable.Category <> "C"
) b
ON a.Code = b.Code
WHERE b.Code IS NULL
然而,虽然我可以为每个类别硬编码一个查询,但我似乎无法构造一个查询来计算每个可能的Category
值。
这是我尝试过的:
SELECT c.Category,
(
SELECT COUNT(a.Code)
FROM
(
SELECT MyTable.Code
FROM MyTable
WHERE MyTable.Category = c.Category
) a
LEFT JOIN
(
SELECT MyTable.Code
FROM MyTable
WHERE MyTable.Category <> c.Category
) b
ON a.Code = b.Code
WHERE b.Code IS NULL
) AS UniqueCodes
FROM
(
SELECT MyTable.Category
FROM MyTable
GROUP BY MyTable.Category
) c
但是,没有在嵌套查询c.Category
的范围内定义。SELECT
谁能建议我如何获得预期的结果?
解决方案
您可以使用两个级别的聚合:
select minc as category, count(*)
from (select code, min(category) as minc, max(category) as maxc
from t
group by code
) as c
where minc = maxc
group by minc;
推荐阅读
- r - 如何在R中为不同类型的数据绘制趋势线?
- angular - 新大型项目Angular2上的内联样式代码
- python - Python matplotlib 覆盖轴
- android - 尝试使用 Kotlin 在 android studio 4.1 上创建应用程序时出错
- angular - 如何将 Docker 容器内的 node_modules 表单同步到 node_modules 文件夹外?
- java - 如何使用递归获取二叉搜索树中的所有非叶节点?
- java - 带有 JAVA 的 MQTT - 当使用 QoS1 发布一些数据时,我丢失了一些数据
- c - 找出 typedef 是否在 C 中定义了特定类型
- java - 使我的 switch 语句工作并打印到控制台
- python - 如何在不更新pygame中的整个屏幕的情况下画一条线?