sql - 在 SQL 中,为什么我不能使用 SELECT 语句中的其他查询来进行计算?
问题描述
这是示例表“test0608”:
product_name color amount
Product1 Red 123
Product1 Blue 126
Product2 Blue 103
Product2 Red NULL
Product2 Red 89
Product1 Red 203
我试图找到所有红色产品而不是蓝色产品。这是我的代码:
select
product_name
,sum(case when color = Blue then 1 else 0 end ) as blue_num
,sum(case when color = Red then 1 else 0 end ) as red_num
,(red_num- blue_num) as difference
from test0608
group by product_name
但是,我收到错误“未知列“red_num”和“blue_num”,这意味着我不能使用我刚刚在 select 语句中计算的两个总和。为什么?
解决方案
请试试这个。blue_num 和 red_num 是这里的别名。所以这里不作为字段使用。
SELECT product_name
, SUM(CASE WHEN color = 'Blue' THEN 1 ELSE 0 END) AS blue_num
, SUM(CASE WHEN color = 'Red' THEN 1 ELSE 0 END) AS red_num
, (SUM(CASE WHEN color = 'Red' THEN 1 ELSE 0 END) - SUM(CASE WHEN color = 'Blue' THEN 1 ELSE 0 END)) AS difference
FROM test0608
GROUP BY product_name;
使用子查询的替代方式。如果想显示red_num 的正差,则在WHERE子句中使用 red_num >= blue_num 。但是,如果显示所有产品但负差为 0,则在t.red_num >= t.blue_num THEN t.red_num - t.blue_num ELSE 0 END差时使用
SELECT t.product_name
, t.blue_num
, t.red_num
, (t.red_num - t.blue_num) AS difference
FROM (SELECT product_name
, SUM(CASE WHEN color = 'Blue' THEN 1 ELSE 0 END) AS blue_num
, SUM(CASE WHEN color = 'Red' THEN 1 ELSE 0 END) AS red_num
FROM test0608
GROUP BY product_name) t;
推荐阅读
- python - 如何在 QMouseEvent 期间强制小部件重新绘制?
- c - 如何获取光标位置并更改它?
- next.js - 如何在 next.js 中获取图像宽度/高度?
- gitlab - 剪切新版本时如何触发 GitLab CI/CD 管道?
- spring-boot - 如何从manyToMany实体获取数据
- flutter - Flutter Stack Widget 有空白,原因不明
- javascript - 生命游戏“细胞”没有正确更新
- regex - 关于 $regex 的简单 MongoDB 问题(业余)
- c# - 从原始 JSON 在其他字典中创建字典
- sql - SQL查询跨类别累计购买总和