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

技术问询:需生成含distinct item及sum的SQL聚合查询(支持GroupBy)

没问题,这是SQL里非常常见的聚合需求,我给你整理了基础实现和几个实用的扩展场景:

基础实现方案

要获取每个唯一条目(item)的总和,直接使用GROUP BY就可以完美实现——因为GROUP BY本身会自动将相同的item分组,结果里的item自然都是唯一的,不需要额外加DISTINCT(当然加了也不影响,但属于冗余写法)。

假设你的表名为order_items,包含item_name(唯一条目字段)和amount(需要求和的数值字段),基础SQL如下:

SELECT 
    item_name,
    SUM(amount) AS total_amount
FROM 
    order_items
GROUP BY 
    item_name;

说明:

  • GROUP BY item_name会把所有相同item_name的记录归为一组
  • SUM(amount)计算每组的数值总和,并用AS total_amount给结果列起一个清晰的别名
  • 查询结果里的item_name都是唯一的,完全满足你要distinct item的要求
扩展场景示例

如果有额外的业务需求,可以基于基础写法调整:

  • 过滤后再聚合:比如只统计2024年的订单数据
SELECT 
    item_name,
    SUM(amount) AS total_amount
FROM 
    order_items
WHERE 
    order_date >= '2024-01-01'
GROUP BY 
    item_name;
  • 处理NULL值:如果item字段可能存在NULL,你可以选择排除或标记它们
    • 排除NULL值:
    SELECT 
        item_name,
        SUM(amount) AS total_amount
    FROM 
        order_items
    WHERE 
        item_name IS NOT NULL
    GROUP BY 
        item_name;
    
    • 将NULL标记为特定名称(比如“未命名商品”):
    SELECT 
        COALESCE(item_name, '未命名商品') AS item_name,
        SUM(amount) AS total_amount
    FROM 
        order_items
    GROUP BY 
        COALESCE(item_name, '未命名商品');
    

小提示:

注意SELECT里的非聚合字段(比如这里的item_name)必须全部出现在GROUP BY子句中,否则在严格的SQL模式(比如MySQL的ONLY_FULL_GROUP_BY)下会报错,这是SQL的标准规范哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:35:16