You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询不聚合也不加入group by的列能否正常展示对应值?

需求实现方案

该需求可以实现,主流SQL方言均支持对应写法,不需要将store字段加入GROUP BY子句,也不需要对store做聚合操作,即可实现每组仅返回cost最高的一行数据。

方案1:窗口函数实现(推荐,支持所有现代SQL数据库)

适用于MySQL 8.0+、PostgreSQL、SQL Server、Oracle等支持窗口函数的数据库,性能更优,逻辑清晰:

SELECT id, name, cost, store
FROM (
    SELECT 
        id,
        name,
        cost,
        store,
        -- 按id+name分组,组内按cost倒序排序生成行号
        ROW_NUMBER() OVER (PARTITION BY id, name ORDER BY cost DESC) AS rn
    FROM test
) AS temp_table
WHERE rn = 1; -- 仅取每组排序第一的行

注意:如果同一id、name组内存在多行cost相同且都是最大值的情况,ROW_NUMBER()会随机返回其中一行;如果需要返回所有最高cost的行,可以将ROW_NUMBER()替换为RANK()。

方案2:关联子查询实现(兼容旧版数据库)

适用于MySQL 5.x等不支持窗口函数的低版本数据库:

SELECT a.id, a.name, a.cost, a.store
FROM test a
INNER JOIN (
    -- 先查询每个id+name组的最高cost
    SELECT id, name, MAX(cost) AS max_cost
    FROM test
    GROUP BY id, name
) AS b ON a.id = b.id AND a.name = b.name AND a.cost = b.max_cost;

注意:该写法在组内存在多个相同最高cost的行时,会返回所有符合条件的行,若需要强制每组仅返回一行,可根据业务需求补充额外去重逻辑。


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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:54:03