MYSQL - запрос GROUP BY и COUNT - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть база данных, содержащая подобные строки

title          category
-----------------------
super widget      1
ultimate widget   1
regular widget    1
happy widget      2
sad widget        2
ugly widget       3
pretty widget     3

используя запрос ниже, я получаю хороший список всех строк с заголовком типа «виджет» и счетчиком количества в каждой категории. поэтому результат будет выглядеть как

catid   itemcount
-------------------
1           3
2           2
3           2

SELECT catid, COUNT(*) AS 'itemcount' FROM allwidgets
 WHERE title like '%widget%' GROUP BY catid;

Мне нужно это изменить. Я хочу закончить со списком, который показывает, сколько в категории 3 и сколько во всех других категориях, поэтому результат будет

catid   itemcount
------------------
3           2
allothers   5

Я мог бы сделать это с 2 запросами, один, чтобы получить полный счет, а другой, чтобы получить счет catid 3, затем вычесть их, но возможно ли это с одним запросом?

1 Ответ

2 голосов
/ 04 апреля 2019

Вы можете использовать CASE выражение:

SELECT CASE WHEN catid = 3 THEN '3' ELSE 'allothers' END AS catid,COUNT(*) AS itemcount 
FROM allwidgets
WHERE title like '%widget%' 
GROUP BY CASE WHEN catid = 3 THEN '3' ELSE 'allothers' END;
...