#mysql #sql #database #count #group-by
#mysql #sql #База данных #подсчитывает #группировать по
Вопрос:
У меня возникли проблемы с запросом, который мне нужно написать. По какой-то причине я не могу заставить что-либо работать. Я знаю, что решение очень простое, но я просто не могу об этом подумать.
Допустим, у меня есть таблица в моей БД под названием «entrys», которая выглядит следующим образом:
ID | Item | value
------------------------------
1 | item 1 | 3
2 | item 1 | 4
3 | item 1 | 3
4 | item 2 | 3
5 | item 3 | 3
6 | item 1 | 3
7 | item 1 | 3
8 | item 1 | 3
9 | item 4 | 3
10 | item 4 | 6
Я хочу подсчитать, сколько раз встречается элемент 1, где значение = 3, а затем сгруппировать другие элементы вместе, чтобы обеспечить для них количество, равное = 3, поэтому, например, вывод для этой таблицы будет
Item | Count
---------------------
Item 1 | 5
Other | 3
Поскольку элемент 1 встречается в 5 раз со значением 3, а все остальные элементы, имеющие значение 3, группируются вместе и отображаются как другие со значением 3
Ответ №1:
Ключом к агрегации является case
оператор. Затем вам также нужно посчитать соответствующие значения. В MySQL вы можете сделать:
SELECT (CASE WHEN Item = 'item 1' THEN Item ELSE 'Other' END) AS Item, COUNT(*) AS `Count3`
FROM entrys e
WHERE value = 3
GROUP BY Item;
MySQL позволяет использовать псевдонимы столбцов в GROUP BY
. Если вы хотите подсчитать все и где значение равно 3, тогда вы можете сделать:
SELECT (CASE WHEN Item = 'item 1' THEN Item ELSE 'Other' END) AS Item,
COUNT(*) as AllCount, SUM(value = 3) as Count3
FROM entrys e
GROUP BY Item;
Ответ №2:
Попробуйте использовать производную таблицу, где ваши элементы называются либо Item1
или Other
. Затем сгруппируйте производную таблицу по имени и выберите количество.
SELECT
Item,
COUNT(*)
FROM (
SELECT
(CASE
WHEN Item = 'item 1'
THEN 'Item 1'
ELSE 'Other'
END) Item
FROM items
WHERE value = 3) t1
GROUP BY Item
Комментарии:
1. Это сработало как шарм. Просто нужно было добавить предложение where и дал нужные мне результаты, спасибо за вашу помощь, я был так близок, но это просто вылетело у меня из головы.
Ответ №3:
SELECT CASE Item WHEN 'item 1' THEN Item ELSE 'Other' END AS Item, COUNT(ID) AS `Count`
FROM entrys
GROUP BY CASE Item WHEN 'item 1' THEN Item ELSE 'Other' END