In MySQL können Sie die CASE WHEN-Funktion verwenden, um die Datengruppierung abzuschließen.
Die CASE WHEN-Funktion wird zum Beurteilen und Gruppieren von Daten verwendet
Kenntnisse über Flusskontrollanweisungen von MySQL-Triggern.
CASE WHEN ist eine bedingte Steueranweisung, die häufig in der SQL-Programmierung verwendet wird.
Funktion von CASE WHEN :
- Verarbeitung neuer Datenelemente
Zweck: Verwenden Sie die Case When-Anweisung entsprechend den vorhandenen Feldern, um logische Urteile zu fällen, und können Sie neue Felder verarbeiten.
Beispielsweise werden die neuen Felder „Altersgruppe“ und „Vermögensgrad“ berechnet
- Zusammenfassende Informationsverarbeitung
Zweck: Durch die Kombination der Case-When-Anweisung mit der Zusammenfassungsfunktion (z. B. der Sum-Funktion) können flexiblere Funktionen zur Verarbeitung zusammenfassender Informationen realisiert werden.
Tipps: Es ist sehr praktisch, Statistiken für einige Felder nach der Gruppierung zu verwenden
Es ist so, als ob man das Geschlecht nach Groupby zählen möchte
- Filtersteuerung
Zweck: Case When kann auch in Filterbedingungen verwendet werden, um eine flexiblere Steuerung der Filterbedingungen zu erreichen.
Für folgende Fälle gibt es zwei Syntaxen: Was ist der Unterschied zwischen den beiden Syntaxen?
1. Einfache Funktion: Alle möglichen Werte dieses Feldes auflisten*
CASE [col_name]
WANN [Wert1] DANN [Ergebnis1]
WANN [Wert2] DANN [Ergebnis2]
…
ELSE [Standard]
ENDE
2. Suchfunktion (bedingte Beurteilung)
Sie können Urteile schreiben, und die Suchfunktion gibt nur den ersten Wert zurück, der die Bedingungen erfüllt, und andere Fälle werden ignoriert
FALL
WANN [Ausdruck] DANN [Ergebnis1]
WANN [Ausdruck] DANN [Ergebnis2]
…
ELSE [Standard]
ENDE
-
Verarbeitung neuer Datenelemente
Beispiel; (einfache Funktion) Ordnen Sie anhand des Namens des Helden die Ausrüstung zu, die ihm gehört („Ausrüstung“ ist ein neues Datenelement).
SELECT
NAME '英雄',
CASE NAME
WHEN '德莱文' THEN '斧子'
WHEN '德玛西亚-盖伦' THEN '大宝剑'
ELSE '无'
END [as] '装备'
FROM user_info;
Beispiel: (Suchfunktion) Erstellen Sie nach Alter ein neues Datenelement „Altersgruppe“, Feldgruppierung
-- when 表达式中可以使用 and 连接条件
SELECT
NAME '英雄', age '年龄',
CASE
WHEN age < 18 THEN '少年'
WHEN age < 30 THEN '青年'
WHEN age >= 30 AND age < 50 THEN '中年'
ELSE '老年'
END [as] '年龄段'
FROM user_info;
-
Zusammenfassende Informationsverarbeitung
Beispiel: (Kooperieren mit Aggregatfunktion) Zählen Sie die Anzahl der männlichen und weiblichen Kunden in den Jahren vor und nach den 80ern.
SELECT
CASE WHEN birth_dt < mdy(1,1,1980) THEN '80前' ELSE '80后' END as 年龄段
, SUM( CASE WHEN gender = '1' THEN 1 ELSE 0 END) as 男性数量
, SUM( CASE WHEN gender = '2' THEN 1 ELSE 0 END) as 女性数量
FROM custom_info
GROUP BY 年龄段
Frage: Gruppieren nach basiert auf der Altersgruppe, aber es scheint, dass die Aggregation nach der Gruppierung nicht sichtbar ist. Denken Sie über den SQL-Ausführungsprozess nach, z. B. zuerst das neue Datenelement „Altersgruppe“ abrufen und dann die Anzahl der Männer zählen und Frauen je nach Altersgruppe.
Beispiel: Zählen Sie die Anzahl der Jungen und Mädchen in jeder Klasse anhand der cls_id
use sc_sys;
-- 查看学生表(结果1)
SELECT * FROM tb_student;
-- 按cls_id 分班,创建新的数据项“班别”(结果2)
SELECT *,
CASE cls_id
WHEN 1 THEN '1班'
WHEN 2 THEN '2班'
WHEN 3 THEN '3班'
WHEN 4 THEN '4班'
WHEN 5 THEN '5班'
WHEN 6 THEN '6班'
WHEN 7 THEN '7班'
WHEN 8 THEN '8班'
ELSE '其他班级'
END as 班别
FROM tb_student ORDER BY 班别, ssex DESC;
-- 按cls_id创建班别,并统计每个班别的男、女生数量(结果3)
SELECT
CASE cls_id
WHEN 1 THEN '1班'
WHEN 2 THEN '2班'
WHEN 3 THEN '3班'
WHEN 4 THEN '4班'
WHEN 5 THEN '5班'
WHEN 6 THEN '6班'
WHEN 7 THEN '7班'
WHEN 8 THEN '8班'
ELSE '其他班级'
END 班别
, SUM( CASE WHEN ssex = '男' THEN 1 ELSE 0 END) as 男性数量
, SUM( CASE WHEN ssex = '女' THEN 1 ELSE 0 END) as 女性数量
FROM tb_student
GROUP BY 班别;
Tipps: Es ist sehr praktisch, Statistiken für einige Felder nach der Gruppierung zu verwenden
Es ist so, als ob man das Geschlecht nach Groupby zählen möchte
-- 按cls_id创建班别,并统计每个班别的男、女生数量(结果4)
SELECT
CASE cls_id
WHEN 1 THEN '1班'
WHEN 2 THEN '2班'
WHEN 3 THEN '3班'
WHEN 4 THEN '4班'
WHEN 5 THEN '5班'
WHEN 6 THEN '6班'
WHEN 7 THEN '7班'
WHEN 8 THEN '8班'
ELSE '其他班级'
END 班别, ssex, COUNT(*) 数量
FROM tb_student
GROUP BY 班别, ssex DESC
ORDER BY 班别;
-- 若报错,将班别改为class,即字段命名最好还用英文
-- Unknown column '班別' in 'order clause'
-
Filtersteuerung
Beispiel: Durchsicht der Zielkundenliste,
Zielgruppe für die Region 0200 sind Kunden mit einem Vermögen von mindestens 1 Million.
Für andere Regionen zielen Sie auf Kunden mit einem Vermögen von mindestens 500.000 ab.
Geben Sie die Kundennummer, den Namen, die Mobiltelefonnummer, die Vorwahl und das Gesamtvermögen des Zielkunden aus.
SELECT Party_Id, Name, Mobile, Zone_Num, Total_Asset
FROM Custom_Info
WHERE CASE WHEN Zone_Num='0200' THEN Total_Asset>=1000000
ELSE Total_Asset>=500000
END
-- 即针对0200地区,使用条件Total_Asset>=1000000
-- 而针对其他地区,使用条件Total_Asset>=500000
-
Weitere Funktionen: Zeile zu Spalte
Beispiel: Die Aggregationsfunktion sum arbeitet mit der einfachen Funktion case when zusammen, um eine Zeilen-in-Spalten-Konvertierung zu realisieren , Alias
-- 聚合函数 sum 配合 case when 的简单函数实现行转列
SELECT st.stu_id '学号', st.stu_name '姓名',
sum( CASE co.course_name WHEN '大学语文' THEN sc.scores ELSE 0 END ) '大学语文',
sum( CASE co.course_name WHEN '新视野英语' THEN sc.scores ELSE 0 END ) '新视野英语',
FROM edu_student st
LEFT JOIN edu_score sc ON st.stu_id = sc.stu_id
LEFT JOIN edu_courses co ON co.course_no = sc.course_no
GROUP BY st.stu_id
ORDER BY NULL;
-- 注释:group by后默认排序 后面跟上order by null表示 不排序,查询速度更快。
Diese Art von Funktion ähnelt in etwa der Funktion, die im vorherigen Beitrag erreicht werden soll: „Datenaufteilungsverarbeitung (Datenrahmen-Datenstruktur in Pandas basierend auf Python)“, Link https://blog.csdn.net/Cameback_Tang/article/details /102876947
Fall, wenn die Funktion auch in Groupby verwendet werden kann
-- 查询output的分布
select
case when output < -500 then '(, -500)'
when output < -250 then '[-500, -250)'
when output < -200 then '[-250, -200)'
when output < -128 then '[-200, -128)'
when output < -88 then '[-128, -88)'
when output < -18 then '[-88, -18)'
when output < 0 then '[-18, 0)'
when output = 0 then '0'
else 'else' end output_bin
, count(user_id) cnt
from data_table
group by case when output < -500 then '(, -500)'
when output < -250 then '[-500, -250)'
when output < -200 then '[-250, -200)'
when output < -128 then '[-200, -128)'
when output < -88 then '[-128, -88)'
when output < -18 then '[-88, -18)'
when output < 0 then '[-18, 0)'
when output = 0 then '0'
else 'else' end