列转行:利用max(case when then)
SELECT`name`,MAX(CASE
WHEN course='语文' THENscoreEND)AS语文,MAX(CASE
WHEN course='数学' THENscoreEND)AS数学,MAX(CASE
WHEN course='英语' THENscoreEND)AS英语FROMstudentGROUP BY`name`
;
合并字段显示:利用group_cancat(course,”:”,”score”)
SELECT`name`,
GROUP_CONCAT(course, ":", score)AS成绩FROMstudentGROUP BY`name`;
-- -- -- -- -- -- -- --- - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --- - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --- - -- -- -- -- -- -- -- -- -- -- -- -- -
--合并字段显示 : 去重、排序
SELECT rid,GROUP_CONCAT(DISTINCT gid ORDER BYgid)FROMgt_lighting.res_lightsGROUP BY rid;
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
多来点面试题:
计算各班级及格人数:
SELECT class,SUM(CASE WHEN score >= 60 THEN 1 END) AS '及格',SUM(CASE WHEN score < 60 THEN 1 END) AS '不及格'
FROMgradeTableGROUP BY class;
或者:
SELECT succ.class,succ.su AS '及格',fail.fa AS '不及格'FROM
(
SELECTclass,COUNT(1) AS su
FROM gradeTable
WHERE score>= 60GROUP BYclass) AS succ,
(
SELECTclass,COUNT(1) AS fa
FROM gradeTable
WHERE score< 60GROUP BYclass) AS fail
WHERE succ.class = fail.class;
Console :
啦啦啦
啦啦啦