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