Чтобы получить только таблицу Name, q1=1, q1=2, q1=3
из results
, вы можете использовать только:
SELECT Name,
COUNT(IF(q1=1,1,NULL)) as q1is1,
COUNT(IF(q1=2,1,NULL)) as q1is2,
COUNT(IF(q1=3,1,NULL)) as q1is3
FROM results
GROUP BY Name
Это подсчитывает количество случаев каждого результата (по имени) - это работает, потому что вы тольковам нужно три дополнительных столбца и знать заранее, какие значения q1 вы хотите иметь столбцы.(Если бы, скажем, было полмиллиона значений q1, в MySQL не было бы никакого способа, кроме как выписать COUNT(IF(q1=i,1,0)) AS q1isi
полмиллиона раз - не совсем идеально).возможно что-то вроде этого (добавьте это как JOIN
):
select
JustACME.Name,
JustACME.NameCount,
COALESCE( COUNT( * ), 0 ) as CountFromResultsTable,
r2.q1is1, r2.q1is2, r2.q1is3 -- <-- grab those extra rows
from
( select a.Name,
count(*) as NameCount
from
acme a
group by
a.Name ) JustACME
LEFT JOIN results r
on JustACME.Name = r.Name
LEFT JOIN (SELECT Name, -- <-- add the new table in
COUNT(IF(q1=1,1,NULL)) as q1is1,
COUNT(IF(q1=2,1,NULL)) as q1is2,
COUNT(IF(q1=3,1,NULL)) as q1is3
FROM results
GROUP BY Name) r2
ON JustACME.Name = r2.Name
group by
JustACME.Name
На самом деле, я уверен, что есть способ сделать это без необходимости LEFT JOIN
для подзапроса, номой mysql кунг-фу закончился: P