2015-06-25 4 views
0

Скажем, у меня есть таблица со следующими данными:MySQL - Рассмотрим несколько строк с одинаковым значением в двух столбцах в одной строке

Event_ID | Action_ID | Date_of_Action 

    1  |  1  | 2015-06-25 
    2  |  1  | 2015-06-25 
    3  |  1  | 2015-04-10 
    4  |  2  | 2015-05-11 

Мне нужно, чтобы получить количество строк в таблице с конкретными action_id-х и отобразите их, но мне нужно обрабатывать любые строки с тем же Action_ID AND Date_of_Action, что и 1 строка (или 1 счет).

Я хочу, чтобы отобразить:

Count 1 | Count 2 
     | 
    2  | 1   

Я попытался это:

SELECT 
SUM(IF(event.Action_ID = 1, 1, 0)) AS 'Count 1', 
SUM(IF(event.Action_ID = 2, 1, 0)) AS 'Count 2', 
... 
GROUP BY event.Action_ID, event.Date_of_Action 

Но мой выход выглядел следующим образом:

Count 1 | Count 2 
     | 
    3  | 1 

Любые идеи?

ответ

4

Я бы начать получать различные action_id и дату пару, как это:

SELECT DISTINCT action_id, date_of_action 
FROM myTable; 

После того, как вы едите, что вы можете получить счет с помощью условной агрегации:

SELECT SUM(action_id = 1) AS 'count 1', SUM(action_id = 2) AS 'count 2' 
FROM(
    SELECT DISTINCT action_id, date_of_action 
    FROM myTable) tmp; 

Вот SQL Fiddle примера.

+0

Отлично работает - Спасибо! Не знал, что вы можете поставить этот условный код в SUM() –

+0

@BradW без проблем. Это один из моих любимых трюков! – AdamMc331

2

Используйте подзапрос, который комбинирует строки с одинаковым идентификатором действия и дата:

SELECT 
SUM(IF(event.Action_ID = 1, 1, 0)) AS 'Count 1', 
SUM(IF(event.Action_ID = 2, 1, 0)) AS 'Count 2', 
... 
FROM (SELECT DISTINCT Action_ID, Date_of_Action 
     FROM event) AS event 
+0

Великие умы думают одинаково! – AdamMc331

-1

Вам действительно нужно их в отдельных столбцах или это просто данные вам нужны? Если вы счастливы за ряд за счет, попробуйте

SELECT Action_ID, count(Event_ID) 
FROM myTable 
group by Action_ID, Date_of_Action 
+0

Это делает противоположное тому, что он хочет. Он подсчитывает количество повторений действия action_ID и даты, а не подсчет их как одного. BTW, это должно быть 'COUNT (*)', а не 'COUNT (Event_ID)'. – Barmar

Смежные вопросы