sql - 在 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(销售)如果我没有使用分组)
先感谢您
解决方案
使用窗口函数:
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;
请注意,我从列别名中删除了单引号。最重要的是,它们不是必需的。但实际上,不要将字符串文字与列别名混淆;它们是不同的,并且不需要对别名使用单引号(必要时使用反引号或双引号来转义名称)。
推荐阅读
- assembly - 这个汇编程序的堆栈是如何工作的?
- python - 如果数据库包含某个值,则将 x 数量添加到变量(python)
- html - 在月亮上停止 css 关键帧翻转动画,如月相
- tensorflow - 谷歌云 GPU 机器突然重启
- java - 将变量转换为 Big O 中的原始操作吗?
- php - 我无法到达表格的 td 标签
- java - 从 Firebase 数据库中检索计数数据
- python - 除了手动之外,如何在 Matplotlib 中“暂停”、“恢复”和“重置”默认颜色循环?
- php - Apache 2.4 PHP 启动:无法加载动态库 'curl.so'、libcurl.4.dylib
- go - 如何使用 go 获取两位数的当前小时和分钟?