You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在GROUP BY按Date分组时为MAX()函数添加条件获取指定Code最大值

按日期分组,针对不同Code取Value最大值的正确实现

你这个需求其实挺常见的,属于条件聚合的场景,思路方向是对的,但MAX()函数里直接写WHERE子句的语法不合法,咱们可以通过两种方式来实现:

通用写法:用CASE表达式实现条件聚合

这种写法几乎兼容所有SQL数据库(比如SQL Server、MySQL、Oracle等),是最稳妥的选择:

SELECT 
    [Date],
    MAX(CASE WHEN [Code] = 'GOLD' THEN [Value] END) AS BestGold,
    MAX(CASE WHEN [Code] = 'SILVER' THEN [Value] END) AS BestSilver
FROM [MyTable]
GROUP BY [Date]

简单说下原理:当Code匹配目标值时,CASE会返回对应的Value,否则返回NULL;而MAX()函数会自动忽略NULL值,这样就得到了每个日期下对应Code的Value最大值。另外别忘了把[Date]放到SELECT列表里,不然分组后你没法知道每个最大值对应的是哪一天。

进阶写法:用FILTER子句(仅部分数据库支持)

如果你的数据库支持FILTER子句(比如PostgreSQL、BigQuery、Redshift等),写法会更直观易懂:

SELECT 
    [Date],
    MAX([Value]) FILTER (WHERE [Code] = 'GOLD') AS BestGold,
    MAX([Value]) FILTER (WHERE [Code] = 'SILVER') AS BestSilver
FROM [MyTable]
GROUP BY [Date]

这个语法是专门为条件聚合设计的,可读性更强,但要注意不是所有数据库都支持(比如SQL Server、MySQL就没有这个语法)。

内容的提问来源于stack exchange,提问作者ManInMoon

火山引擎 最新活动