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

无子查询实现客户订单占总订单量百分比的SQL方案求助

无自查询的单SQL实现客户订单量占比计算

你可以用窗口函数实现单查询无自查询的需求,窗口函数能在同一条查询里计算全局订单总量,不用单独写子查询。修改后的SQL如下:

SELECT
    c.name,
    COALESCE(SUM(o.units), 0) / SUM(o.units) OVER () * 100 AS percentage_units
FROM customer c
LEFT OUTER JOIN orders o ON c.id = o.customerid
GROUP BY c.id, c.name

关键说明:

  • SUM(o.units) OVER ():这个窗口函数会计算整个Orders表的units总和,等效于原中子查询的作用,但它是在同一次表扫描中完成的,性能更优。
  • COALESCE(SUM(o.units), 0):保留这个逻辑,确保没有订单的客户占比显示为0而非NULL。
  • GROUP BY中加入c.name:适配多数数据库的语法要求(比如MySQL的ONLY_FULL_GROUP_BY模式),避免非聚合列未分组导致的语法错误。

只要你的数据库支持窗口函数(如MySQL 8.0+、PostgreSQL、SQL Server等),这个方案就能正常运行,且仅需一次查询完成计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 02:33:08