Sql 基于案例陈述的聚合结果
需要一些帮助来编写查询。假设我正在使用一个表Sql 基于案例陈述的聚合结果,sql,Sql,需要一些帮助来编写查询。假设我正在使用一个表sales,如下所示: trans_id item_number sales 1 1 10 1 11 5 2 11 3 2 13 4 我希望我的输出包含交易id、交易的总销售额和Y/N标志 这可以通过下面的case语句确定:当项目编号介
sales
,如下所示:
trans_id item_number sales
1 1 10
1 11 5
2 11 3
2 13 4
我希望我的输出包含交易id、交易的总销售额和Y/N标志
这可以通过下面的case语句确定:当项目编号介于1和10之间时的case,然后“Y”或“N”结束
但是,我需要在聚合级别应用该标志,如果至少有一个项目具有“Y”标志,那么整个事务应该包括一个'Y'
标志。如果没有任何项目具有'Y'
标志,则应标记整个事务'N'
。输出基本上应该如下所示:
trans_id flag sales
1 'Y' 15
2 'N' 7
下面的查询几乎让我达到了目的,但我不得不将其用作子查询
让我得到预期的结果。是否可以修改案例
语句或使用
其他一些方法,以便我可以在相同的SELECT
语句(即不使用下面的查询作为子查询)
您可以使用max()
:
使用
'Y'
和'N'
,MAX()
充当聚合或操作MIN()
将是一个集合,也就是说,所有项目编号都在该范围内。谢谢!不知道MAX()
函数是这样工作的
SELECT trans_id
, CASE WHEN item_number BETWEEN 1 AND 10 THEN 'Y' ELSE 'N' END
, SUM(sales)
FROM sales
GROUP BY trans_id, item_number
select trans_id,
max(case when item_number between 1 and 10 then 'Y' else 'N' end),
sum(sales)
from sales
group by trans_id;