Как подсчитать вхождение базы данных при группировке по полю

У меня есть таблица с 2 рядами, скажем, «пользователь» и «действие». это выкладывается как таковое —

user    |    action

bob          page view
mike         detail view
bob          page view
mike         page view
bob          detail view

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

bob = (2) page views (1) detail view
mike = (1) page view (2) detail views

Я пробовал group by, но он ограничивает каждый запрос до 1, так как он группируется следующим образом:

$sql = "SELECT * FROM table GROUP BY user";

а затем с помощью операторов if —

if($action == 'page view'){
$pv++;
}

Я знаю, что есть правильный способ сделать это в заявлении без использования операторов if, но не уверен, как … Спасибо!

0

Решение

Вы можете сделать это в SQL напрямую:

SELECT user, action, count(*) as total
FROM table
GROUP BY 1, 2
1

Другие решения

Если вы хотите, чтобы ядро ​​базы данных возвращало общее количество страниц / подробное представление для каждого пользователя в одной строке, вам придется использовать условный оператор ветвления. Следующий запрос вернет всех ваших пользователей вместе с их просмотрами страниц и подробными представлениями:

SELECT user,
SUM(CASE WHEN action = 'page view' THEN 1 ELSE 0 END) AS page_view,
SUM(CASE WHEN action = 'detail view' THEN 1 ELSE 0 END) AS detail_view
FROM table
GROUP BY user;
1

Да, возможно, sql может сделать это напрямую
Select user,count(*),(distinct action) from table group by user

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector