我正在研究一个案例,其中我们有许多装满液体的罐子。测量液体量并将信息存储在数据库中。此更新每 5 分钟完成一次。此处存储以下信息:
- 坦克标识
- 填充水平
- 时间戳
我想读出数据库并将每个储罐分类为以下"填充水平"范围之一:
- 范围 A: 0 - 40%
- 范围 B: 40 - 75%
- 范围 C: 75 - 100%
最后,我希望拥有范围 A 中的坦克数量、B 中的坦克数量和范围 C 中的坦克数量。我可以选择DISTINCT TankId
的填充水平,但这不起作用...
SELECT COUNT(DISTINCT tankId)
FROM TankDemo
WHERE (filllevel > 0 AND filllevel < 40);
显然,它没有为我提供每个范围的正确坦克数量。希望你们中的一些人对我如何获得这些数据提出建议。
多谢
您可以使用CASE 语句来做到这一点:
SELECT sum(
CASE
WHEN filllevel>=0 and filllevel<40
THEN 1
ELSE 0
END) AS 'Range A',
sum(
CASE
WHEN filllevel>=40 and filllevel<=79
THEN 1
ELSE 0
END) AS 'Range B',
sum(
CASE
WHEN filllevel>79 and filllevel<=100
THEN 1
ELSE 0
END) AS 'Range C'
FROM TankDemo ;
通过使用 case 语句,您可以获得所需的结果。试试下面的一个,它会随心所欲地工作
SELECT count(distinct
CASE
WHEN filllevel>=0 and filllevel<40
THEN tankId END) AS 'Range A',
count(distinct
CASE
WHEN filllevel>=40 and filllevel<=75
THEN tankId END) AS 'Range B',
count(distinct
CASE
WHEN filllevel>75and filllevel<=100
THEN tankId
END) AS 'Range C'
FROM TankDemo ;