MySQL сумма значений столбца из производной таблицы - PullRequest
0 голосов
/ 01 февраля 2012

Это мой запрос:

SELECT usr.id,
       count(DISTINCT sol.id) as 'Asked',
       count(DISTINCT ans.id) as 'Answered',
       sum(DISTINCT CASE ans.accepted WHEN 1 THEN 1 ELSE 0 end) as 'Accepted'
FROM tbl_users usr
LEFT JOIN tbl_solutions sol on sol.authorID = usr.id
LEFT JOIN tbl_solution_answers ans on ans.authorID = usr.id
group by usr.id, sol.authorID

Мой запрос выше с sum(DISTINCT CASE ans.accepted WHEN 1 THEN 1 ELSE 0 end) только когда-либо возвращает 1, хотя я знаю, что это не так.Я попытался добавить групповое предложение в ans.authorID, но это не имеет никакого эффекта.

Как получить сумму всех строк в таблице tbl_solution_answers ans, где authorID соответствует tbl_users.id и Accepted равно 1.

1 Ответ

1 голос
/ 02 февраля 2012
SELECT usr.id,
   count(DISTINCT sol.id) as 'Asked',
   count(DISTINCT ans.id) as 'Answered',
   count(DISTINCT case ans.accepted when 1 then ans.id end) as 'Accepted'
FROM tbl_users usr
LEFT JOIN tbl_solutions sol on sol.authorID = usr.id
LEFT JOIN tbl_solution_answers ans on ans.authorID = usr.id
group by usr.id, sol.authorID, ans.authorID

После стольких перестановок count(DISTINCT case ans.accepted when 1 then ans.id end) as 'Accepted', кажется, работает.Теперь, если authorID в tbl_solution_answers имеет 8 строк, все они будут возвращены как Answered, и если, скажем, 3 из них Accepted, тогда 3 возвращается как Accepted.

...