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 соответственно, поэтому важно знать, что вы запрашиваете.

Другие вопросы по тегам