CASE WHEN-Funktion @SQL-Lernen

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

 

Supongo que te gusta

Origin blog.csdn.net/Cameback_Tang/article/details/108247243
Recomendado
Clasificación