笔试题(二)

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

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章