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

SQL如何通过子查询合并操作计算各类商品销量占总销量的百分比

合并为单条SQL的实现方法

你可以直接把第一步的分组统计查询作为子查询,嵌套到第二步的FROM子句中即可,逻辑和你分两步执行完全一致,写法如下:

SELECT *, 
    ROUND(CAST(sold_shoes AS FLOAT)/CAST(sold_total AS FLOAT)*100,2) AS sold_shoes_perc,
    ROUND(CAST(sold_gloves AS FLOAT)/CAST(sold_total AS FLOAT)*100,2) AS sold_gloves_perc,
    ROUND(CAST(sold_trousers AS FLOAT)/CAST(sold_total AS FLOAT)*100,2) AS sold_trousers_perc
FROM (
    SELECT stores,
      SUM(shoes) AS sold_shoes,
      SUM(gloves) AS sold_gloves,
      SUM(trousers) AS sold_trousers,
      SUM(shoes) + SUM(gloves) + SUM(trousers) AS sold_total
    FROM t
    GROUP BY stores
) AS t_new

如果你的数据库支持CTE(公用表表达式,MySQL 8.0+、PostgreSQL、SQLite、SQL Server等主流数据库均支持),也可以用CTE写法,逻辑分层更清晰,后续调整更方便:

WITH t_new AS (
    SELECT stores,
      SUM(shoes) AS sold_shoes,
      SUM(gloves) AS sold_gloves,
      SUM(trousers) AS sold_trousers,
      SUM(shoes) + SUM(gloves) + SUM(trousers) AS sold_total
    FROM t
    GROUP BY stores
)
SELECT *, 
    ROUND(CAST(sold_shoes AS FLOAT)/CAST(sold_total AS FLOAT)*100,2) AS sold_shoes_perc,
    ROUND(CAST(sold_gloves AS FLOAT)/CAST(sold_total AS FLOAT)*100,2) AS sold_gloves_perc,
    ROUND(CAST(sold_trousers AS FLOAT)/CAST(sold_total AS FLOAT)*100,2) AS sold_trousers_perc
FROM t_new

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:36:02