gpt4 book ai didi

SQL:在已分组的表上使用 CASE

转载 作者:行者123 更新时间:2023-12-02 20:27:00 25 4
gpt4 key购买 nike

我正在使用一个 SQLite 数据库,该数据库有一个表 CarUse,其中包含三个字段 CarID (VARCHAR(20))、tDate (VARCHAR(20) 和 Kms (INT)。

目标是创建一个表格来汇总某个日期范围(D1 到 D2)内的公里数,然后如果它们超过 X,则将它们标记为“高公里数”;如果它们低于 Y,则将它们标记为“低公里数”。

因此,逐步构建此过程,我可以使用 GROUP BY 命令轻松找到 CarUse 表中每辆车的总公里数:

SELECT CarID, SUM(Kms)
FROM CarUse
WHERE tDate > D1 AND tDate < D2
GROUP BY CarID

现在,本质上我想做的是创建另一个字段来添加到对 SUM(Kms) 进行分类的结果数据中,以便如果 SUM(Kms) > X 则为“高公里数”,如果 < Y 则为“低公里数”公里'。

首先我尝试过:

SELECT CarID, SUM(Kms) AS A, 
CASE A
WHEN A > X THEN 'High Kms'
WHEN A < Y THEN 'Low Kms'
END
FROM CarUse
WHERE tDate > D1 AND tDate < D2
GROUP BY CarID

当我运行此命令时,我收到一条错误消息,指出“没有这样的列:A”。我的第一个想法是必须在创建结果后分配别名“A”。作为快速修复,我希望如果不使用别名 A,而是仅引用 SUM(Kms),即

SELECT CarID, SUM(Kms), 
CASE SUM(Kms)
WHEN SUM(Kms) > X THEN 'High Kms'
WHEN SUM(Kms) < Y THEN 'Low Kms'
END
FROM CarUse
WHERE tDate > D1 AND tDate < D2
GROUP BY CarID

这会执行,但没有达到预期的结果。事实上,它只将“高公里”分配给那些 SUM(Kms) = 0 的公里。这里我再次假设这是由于 Sum(Kms) 在运行时未知的事实。

我决定尝试不同的策略并单独创建“SUM 表”,然后对其运行相同的查询,即

SELECT A.CarID, A.TotalDist, 
CASE A.TotalDist
WHEN A.TotalDist > X THEN 'High Kms'
WHEN A.TotalDist < Y THEN 'Low Kms'
END
FROM (
SELECT CarID, SUM(Kms) AS TotalDist
FROM CarUse
WHERE tDate > D1 AND tDate < D2
GROUP BY CarID
) AS A

这会执行,但遗憾的是没有执行所需的操作。它仅将“高公里数”分配给 A.TotalDist = 0 的那些。

有人可以帮助我准确理解编译到功能方面发生的情况吗?以及这是否可能

如有任何建议,我们将不胜感激。

最佳答案

由于你的case,应该是这样的:

 CASE
WHEN A.TotalDist > 50 THEN 'High Kms'
WHEN A.TotalDist < 10 THEN 'Low Kms'
END

而不是:

 CASE A.TotalDist
WHEN A.TotalDist > 50 THEN 'High Kms'
WHEN A.TotalDist < 10 THEN 'Low Kms'
END

查询:

SELECT A.CarID, A.TotalDist, 
CASE
WHEN A.TotalDist > 50 THEN 'High Kms'
WHEN A.TotalDist < 10 THEN 'Low Kms'
END High_Low
FROM (
SELECT CarID, SUM(Kms) AS TotalDist
FROM CarUse
GROUP BY CarID
) AS A

<强> Demo

关于SQL:在已分组的表上使用 CASE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59855261/

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