2012-05-17 3 views
2

У меня есть таблицаMysql насчитать несколько полей

 
id|user_id|start|stop 
1|  1| 1| 1 
2|  2| 1| 1 
3|  2| 1| 0 
4|  3| 0| 0 

Я хочу получить следующий результат

 
user_id|total|start|stop 
      1|    1|    1|   1 
      2|    2|    2|   1 
      3|    1|    0|   0 

Так что я хочу сделать 3 количество и сгруппировать его по user_id анг получить. Можно ли подготовить запрос с помощью Joins и без производных таблиц?

+0

Как рассчитываются 'start' и' stop' для 'user_id = 2'? – eggyal

+0

как вы получили следующий результат на основе таблицы, которую у вас есть? –

+0

Кажется, что строка для user_id = 2 должна быть '2 | * 3 * | 2 | 1' –

ответ

2

Общая строка как для подсчета строк с 1 в start и 1 в два раза stop.

SELECT user_id, 
    count(case start WHEN 1 then 1 else null end) AS start, 
    count(case stop WHEN 1 then 1 else null end) AS stop, 
    count (*) AS total 
FROM tablename 
GROUP BY user_id 
+1

Функция Count будет рассчитывать как значение 0 или 1 в столбце. Результат будет неправильным. Op хочет знать, сколько раз пользователь запускает и останавливает и общее количество записей для этого user_id. –

+0

Я неправильно понял вопрос и исправил свой ответ. Не могли бы вы отказаться от голосования? –

+0

Спасибо за ответ !!! – dr0zd

3
SELECT user_id, 
     Sum (start) AS start, 
     Sum (stop) AS stop, 
     Count(*) AS total 
FROM tablename 
GROUP BY user_id 
+0

Даже если в этом случае 'count' дает тот же ответ, что и' sum', я бы рекомендовал использовать 'count' в любом случае - если данные в таблице изменяются, а значения, отличные от 0 или 1, разрешены, они все равно будут работать. –

+0

Спасибо за ответ !!! – dr0zd

3
SELECT user_id, COUNT(*) total, SUM(start=1) start, SUM(stop=1) stop 
FROM  my_table 
GROUP BY user_id 
+0

Спасибо за ответ !!! – dr0zd

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