2013-11-13 4 views
2

Я пытаюсь сделать запрос, чтобы узнать, сколько людей имеет активность в статусе 3. Я полагаю, мне нужен либо COUNT, либо SUM , но это было давно, так как я делал это раньше, и я пытался много искать, но я все еще смущен. Скажем, у меня есть следующее.Найти количество одинаковых строк в столбце, связанных с определенным значением строки в другом столбце

активность таблица:

activity_id status 
1    3 
2    3 
3    1 

Person_activity стол:

person_id activity_id 
1   1 
1   2 
2   2 
2   3 
3   3 

Я хочу, чтобы запрос на выход:

person_id no_of_status_3 
1    2 
2    1 
3    0 

Любые предложения будут оценены. Заранее спасибо.

+1

Просто из названия - '' JOIN' & GROUP BY' –

+0

Нечаянно ударил MySQL тег, это SQL-сервер 2008 – guitarzero

ответ

4

Это должно сделать:

SELECT PA.person_id, 
     COUNT(A.activity_id) no_of_status_3 
FROM Person_activity PA 
LEFT JOIN (SELECT * 
      FROM Activity 
      WHERE status = 3) A 
    ON PA.activity_id = A.activity_id 
GROUP BY PA.person_id 

Here is an sqlfiddle с демонстрационной этого. И результаты:

╔═══════════╦════════════════╗ 
║ PERSON_ID ║ NO_OF_STATUS_3 ║ 
╠═══════════╬════════════════╣ 
║   1 ║    2 ║ 
║   2 ║    1 ║ 
║   3 ║    0 ║ 
╚═══════════╩════════════════╝ 
1
SELECT pa.person_id, count(a.activity_id) 
FROM person_activity pa 
LEFT JOIN activity a ON (pa.activity_id = a.activity_id AND a.status = 3) 
GROUP BY pa.person_id 
+0

Это возвращает значение '1' для 'person_id = 3' – Lamak

+0

Да, должен был считать activity_id, а не '*' - по моей вине я не проверял –

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

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