SQL группировка по количеству
У меня есть таблица из базы данных. Это довольно просто: у него есть PK, назовем его WS_NUM и второе значение, которое может иметь дубликаты, называемые DEPT.
Я хочу получить количество всех WS_NUM, которые соответствуют каждому DEPT (что я могу сделать).
Но тогда я хочу взять результаты того, что может выглядеть как
-------------
| 1 | This |
| 1 | That |
| 2 | His |
| 2 | Hers |
| 7 | Mine |
| 7 | Yours |
| 7 | OURS |
-------------
И сгруппируйте его по графу, чтобы вы получили что-то вроде:
-----------
| 1 | This |
| | That |
-----------
-----------
| 2 | His |
| | Hers |
-----------
-----------
| | Mine |
| 7 | Yours |
| | OURS |
-----------
Возможно ли это, я знаю, я мог бы сделать это с помощью LINQ и некоторого дополнительного C# довольно легко, но это для запроса Confluence SQL, поэтому я действительно ограничен тем, что я могу сделать.
1 ответ
Не зная точно, какой тип базы данных SQL поддерживает Confluence, я не могу дать точного ответа, но могу дать общее представление.
С первоначальным запросом, который выглядит как
SELECT COUNT(WS_NUM) as WS_COUNT, DEPT FROM WOSSNAME GROUP BY DEPT
Вы можете выполнить этот запрос как подвыбор, который объединит отделы в один столбец. Пример MySQL с использованием GROUP_CONCAT
:
SELECT WS_COUNT, GROUP_CONCAT(DEPT SEPARATOR ',') FROM (SELECT COUNT(WS_NUM) as WS_COUNT, DEPT FROM WOSSNAME GROUP BY DEPT) as subselect GROUP BY WS_COUNT;
Или пример Postgres, использующий array_agg
:
SELECT WS_COUNT, array_agg(DEPT) FROM (SELECT COUNT(WS_NUM) as WS_COUNT, DEPT FROM WOSSNAME GROUP BY DEPT) as subselect GROUP BY WS_COUNT;
И то и другое array_agg
а также GROUP_CONCAT
специфичны для Postgres и MySQL соответственно, поэтому важно знать, что вы запрашиваете.