gpt4 book ai didi

sql - 在学生表中查找缺失值

转载 作者:行者123 更新时间:2023-12-04 03:26:50 24 4
gpt4 key购买 nike

学生表包含已支付费用的年份以及未支付费用期间的数据。如何找到丢失的年份。年份分别是2018年2019年2020年2021年,现在提到未缴费的年份。

<表类="s-表"><头>学号缴费年份<正文>10120181012019101202110220181022021

现在 101 的费用在 2018、2019、2021 年支付但 2020 年不支付,102 的费用在 2019 年和 2020 年也不支付。所以输出应该是

<表类="s-表"><头>学号Year_of_Default<正文>10120201022019,2020

最佳答案

创建一个返回您搜索的年份的 CTE 和另一个返回不同学生 ID 的 CTE。
交叉连接它们并左连接你的表,然后过滤掉所有匹配的行。
其余行包含每个学生未支付的所有年份。
然后汇总并使用 LISTAGG() 收集每个学生的所有年份:

WITH 
years(year) AS (
SELECT 2018 FROM dual UNION ALL
SELECT 2019 FROM dual UNION ALL
SELECT 2020 FROM dual UNION ALL
SELECT 2021 FROM dual
),
students(Student_ID) AS (SELECT DISTINCT Student_ID FROM tablename)
SELECT s.Student_ID,
LISTAGG(y.year, ',') WITHIN GROUP (ORDER BY y.year) Year_of_Default
FROM years y CROSS JOIN students s
LEFT JOIN tablename t
ON t.Year_of_paid_fee = y.year AND t.Student_ID = s.Student_ID
WHERE t.Student_ID IS NULL
GROUP BY s.Student_ID

参见 demo .

关于sql - 在学生表中查找缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67458091/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com