【问题标题】:How do sum a column when using group by in SQL?在 SQL 中使用 group by 时如何对列求和?
【发布时间】:2021-02-14 09:09:34
【问题描述】:

我是 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 的总和(因为我可以轻松地输出 10250 by如果我没有使用 group by,则使用 sum(sales)

提前谢谢你

Picture of the code

【问题讨论】:

    标签: sql group-by sum mariadb


    【解决方案1】:

    使用窗口功能:

    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;
    

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

    【讨论】:

    • 我可以知道这里到底发生了什么吗?抱歉,我只是一名学生,我们还没有做到这一点。
    • @DaveIsraelGundiao 。 . .该函数是一种计算所有行总和的便捷方法。您可以参考 MariaDB 中的文档以了解窗口函数以开始了解它们。
    猜你喜欢
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    • 2011-02-14
    • 2014-10-12
    • 2021-08-11
    相关资源
    最近更新 更多