Как подсчитать вхождение базы данных при группировке по полю - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть таблица с 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

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

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

, а затем использует операторы if -

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

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

Ответы [ 3 ]

0 голосов
/ 22 ноября 2018

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

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;
0 голосов
/ 22 ноября 2018

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

0 голосов
/ 22 ноября 2018

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

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