Исходная таблица
Предполагается, что у меня есть таблица с именем 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
query.
Может кто-нибудь посоветовать, как мне получить желаемый результат?