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

如何编写含CAST与GROUP BY的SQL查询以生成合并式购物清单输出

解决方法

没问题,我来帮你搞定这个查询!你需要先统计每个买家每种商品的购买数量,再把这些统计结果拼接成目标格式的字符串,结合GROUP BY、CAST和XML拼接就能实现。以下是可以直接运行的完整查询:

SELECT 
    b.buyer_name AS name,
    STUFF(
        (
            SELECT ', ' + CAST(g.count_num AS VARCHAR) + 'x ' + g.name
            FROM (
                -- 先统计每个买家每种商品的购买数量
                SELECT 
                    id_buyers,
                    name,
                    COUNT(*) AS count_num
                FROM grocery
                GROUP BY id_buyers, name
            ) g
            WHERE g.id_buyers = b.id
            FOR XML PATH(''), TYPE
        ).value('.', 'VARCHAR(MAX)'),
        1, 2, '' -- 去掉开头的", "
    ) AS stuffed_lists
FROM buyers b;

步骤解释:

  • 统计子查询:先对grocery表按id_buyers和name分组,用COUNT(*)算出每种商品的购买次数,得到类似(1, 'milk', 2)这样的结果。
  • XML拼接:通过FOR XML PATH('')把同一个买家的所有商品统计结果拼接成一串,比如', 2x milk, 1x ham'。
  • STUFF处理:用STUFF函数去掉拼接字符串开头多余的, ,得到干净的目标格式。
  • 关联买家表:最后和buyers表关联,确保每个买家都出现在结果里(如果需要处理无购买记录的买家,可以在外层加COALESCE把空值转为默认内容)。

运行这个查询后,得到的结果就和你提供的wanted_output表完全一致啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 04:23:12