Подсчет нескольких строк в MySQL в одном запросе

У меня в настоящее время есть таблица, которая хранит загрузку статистики, такой как представления, загрузки, покупки и т.д. для нескольких нумеруют объектов. Для получения единственной операции рассчитывают на каждый объект, я могу использовать следующий запрос:

SELECT *, COUNT(*)
FROM stats
WHERE operation = 'view'
GROUP BY item_id

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

Действительно ли возможно получить все три сразу?

6
задан Peter Lang 13 July 2010 в 06:08
поделиться

1 ответ

SELECT item_id, operation, COUNT(*) 
FROM stats 
WHERE operation IN ('view','purchase','download') 
GROUP BY item_id, operation

Будет возвращена таблица с одной строкой для каждого item_id и операцией , содержащей три столбца: item_id, тип операции и количество строк с этим item_id.

1 view 3
1 purchase 5
2 download 7
3 download 1

Вы можете опустить WHERE, если хотите, чтобы все item_id были, и вы можете заказать в COUNT (*), чтобы получить самый популярный или что-то в этом роде. Зависит от того, что вы ищете или как вы используете данные.

Если вы хотите, чтобы столбцы располагались рядом друг с другом , используйте IF:

SELECT s1.item_id, SUM( IF( s1.operation = 'view', 1, 0 ) ) views, SUM( IF( s1.operation = 'download', 1, 0 ) ) downloads, SUM( IF( s1.operation = 'purchase', 1, 0 ) ) purchases
FROM stats s1
GROUP BY s1.item_id

item_id | views | downloads | purchases
1 | 3 | 0 | 5
2 | 0 | 7 | 0
3 | 0 | 1 | 0
11
ответ дан 9 December 2019 в 22:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: