首页 > 解决方案 > 在 SQL 中使用 group by 时如何对列求和?

问题描述

我是 SQL 新手,我在此处使用此查询有此表:

select 
    shop_name, sum(sales) as 'total_sales',
    concat((sum(sales)/10250) * 100, '%') as 'sales_percentage' 
from pos 
group by shop_name;

输出:

+-----------+-------------+------------------+
| shop_name | total_sales | sales_percentage |
+-----------+-------------+------------------+
| shop1     |        3250 | 31.7100%         |
| shop2     |        3750 | 36.5900%         |
| shop3     |        3250 | 31.7100%         |
+-----------+-------------+------------------+

我通过作弊实现了这一点,我自己添加了总销售额(即 10250),但我想知道在使用 group by 时如何获得 total_sales 的总和(因为我可以通过使用 sum(销售)如果我没有使用分组)

先感谢您

代码图片

标签: sqlgroup-bysummariadb

解决方案


使用窗口函数:

select shop_name, sum(sales) as total_sales,
       concat((sum(sales)/sum(sum(sales) over ()) * 100, '%') as sales_percentage
from pos 
group by shop_name;

请注意,我从列别名中删除了单引号。最重要的是,它们不是必需的。但实际上,不要将字符串文字与列别名混淆;它们是不同的,并且不需要对别名使用单引号(必要时使用反引号或双引号来转义名称)。


推荐阅读