筆試題(二)

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

在這裏插入圖片描述

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