我正在用sql编写php,我在数据库中有一个teachers_rating表,我想获得评级,比如有多少成员给出5评级,像4,像3,像这样…我用过一次sql查询检查。
SELECT COUNT( teachers_rating.rating ) AS fivestar
FROM teachers_rating
WHERE rating = '5' and id='23'
UNION
SELECT COUNT( teachers_rating.rating ) AS fourstar
FROM teachers_rating
WHERE rating = '4'and id='23'
UNION
SELECT COUNT( teachers_rating.rating ) AS threestar
FROM teachers_rating
WHERE rating = '3'and id='23'
like that its running but out output is
fivestar
18
14
20
but iwant this type of structure
fivestar fourstar threestar
18 14 20
如果有人知道,请帮助我。
这叫做条件聚合:
SELECT COUNT(CASE WHEN t.rating =5 THEN 1 END) as five,
COUNT(CASE WHEN t.rating =4 THEN 1 END) as four,
COUNT(CASE WHEN t.rating =3 THEN 1 END) as three
FROM teachers_rating t
WHERE t.id = '23'
如果你希望所有IDs
都是动态的:
SELECT t.id,
COUNT(CASE WHEN t.rating =5 THEN 1 END) as five,
COUNT(CASE WHEN t.rating =4 THEN 1 END) as four,
COUNT(CASE WHEN t.rating =3 THEN 1 END) as three
FROM teachers_rating t
GROUP BY t.id
试试这个
Select SUM(if(rating = '5',1,0) as fivestar,SUM(if(rating = '4',1,0) as fourstar,SUM(if(rating = '3',1,0) as threestar FROM teachers_rating where id='23'
最简单的形式是:
SELECT (SELECT…)作为五分之一,(SELECT…)作为四星,(SELECT…)作为threestar