1,列转行
数据准备
#测试表和数据准备
CREATE TABLE COLUMN_TO_ROW(
PID INT NOT NULL, #项目组
SID VARCHAR(3) NOT NULL,#软件开发
PNUM INT NOT NULL,#人工数
PRIMARY KEY (PID,SID)#联合主键
);
INSERT INTO `COLUMN_TO_ROW` VALUES (1, '01',10);
INSERT INTO `COLUMN_TO_ROW` VALUES (1, '02',2);
INSERT INTO `COLUMN_TO_ROW` VALUES (2, '02',7);
INSERT INTO `COLUMN_TO_ROW` VALUES (3, '01',6);
INSERT INTO `COLUMN_TO_ROW` VALUES (3, '03',4);
INSERT INTO `COLUMN_TO_ROW` VALUES (1, '03',4);
INSERT INTO `COLUMN_TO_ROW` VALUES (2, '01',6);
需求
项目组开发不同软件投入人数统计
sql
#列转行第一步:先看到列,即 GROUP BY PID,SID
SELECT DISTINCT PID,SID,SUM(PNUM)
FROM COLUMN_TO_ROW
GROUP BY PID,SID;
#列转行第二步:使用case when ...语句,并sum(case when...)
SELECT
DISTINCT PID,
SUM(CASE SID WHEN '01' THEN PNUM ELSE 0 END) AS SID1,
SUM(CASE SID WHEN '02' THEN PNUM ELSE 0 END) AS SID2,
SUM(CASE SID WHEN '03' THEN PNUM ELSE 0 END) AS SID3
FROM COLUMN_TO_ROW
GROUP BY PID;
推荐:https://blog.csdn.net/wyqwilliam/article/details/82559023
2,多列求和
数据准备
#测试表和数据准备
CREATE TABLE MANY_COLUMNS_SUM_TEST(
TID INT NOT NULL PRIMARY KEY,#主键
TCHINESE INT NOT NULL,#语文课成绩
TMATH INT NOT NULL,#数学课成绩
TENGLISTH INT NOT NULL#英语课成绩
);
INSERT INTO `many_columns_sum_test` VALUES (1, 89, 90, 100);
INSERT INTO `many_columns_sum_test` VALUES (2, 90, 100, 120);
INSERT INTO `many_columns_sum_test` VALUES (3, 120, 105, 119);
多列求和
#行内多列求和
SELECT TID,(TCHINESE+TMATH+TENGLISTH) AS TOTAL
FROM MANY_COLUMNS_SUM_TEST
ORDER BY TOTAL DESC;
3,COUNT()函数
数据准备
#测试表和数据准备
CREATE TABLE STUDENT_TEST(
SID INT NOT NULL PRIMARY KEY,
SNAME VARCHAR(16) NOT NULL,
SEX INT NOT NULL,#男1女0
CHNIESE INT NOT NULL, #语文分数
CLASS_ID INT NOT NULL #班级
);
INSERT INTO `student_test` VALUES (1, 'maling', 1, 110, 1);
INSERT INTO `student_test` VALUES (2, 'xiaomei', 0, 80, 1);
INSERT INTO `student_test` VALUES (3, 'xiaohua', 0, 90, 1);
INSERT INTO `student_test` VALUES (4, 'zhangsan', 1, 70, 2);
INSERT INTO `student_test` VALUES (5, 'lisi', 1, 88, 2);
INSERT INTO `student_test` VALUES (6, 'wangyuyan', 0, 120, 2);
INSERT INTO `student_test` VALUES (7, 'zhangquanling', 0, 130, 2);
INSERT INTO `student_test` VALUES (8, 'huge', 1, 140, 3);
INSERT INTO `student_test` VALUES (9, 'huojianhua', 1, 130, 3);
INSERT INTO `student_test` VALUES (10, 'jingdong', 1, 145, 3);
INSERT INTO `student_test` VALUES (11, 'liuruoying', 0, 135, 4);
COUNT() 练习
#男生女生数量
SELECT SEX,COUNT(SEX)
FROM STUDENT_TEST
GROUP BY SEX;
#哪个班男生最多?(一样多的怎么处理?)
SELECT CLASS_ID,COUNT(SEX) AS MALENUM
FROM STUDENT_TEST WHERE SEX = 1
GROUP BY CLASS_ID
ORDER BY MALENUM DESC