首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -使用groupby和partitioning进行聚合

SQL -使用groupby和partitioning进行聚合
EN

Stack Overflow用户
提问于 2016-07-18 18:13:57
回答 5查看 46关注 0票数 0

我有一个名为sales的表

代码语言:javascript
复制
 brand  | model    | sales           
--------+----------+------
 brand1 | model11  | 100
 brand1 | model11  | 300
 brand2 | model21  | 100
 brand2 | model22  | 400 
 brand3 | model31  | 100

我使用的是以下SQL查询

代码语言:javascript
复制
SELECT 
     brand, SUM(sales)/SUM(sales) OVER () as sales_share
FROM sales
GROUP BY brand

以获取每个品牌的sales_share,如下所示

代码语言:javascript
复制
 brand  | sales_share          
--------+--------------
 brand1 | 0.4
 brand2 | 0.5
 brand3 | 0.1

然而,我得到了错误的Attribute SALES.sales must be GROUPed or used in an aggregate function --有什么指示吗?

EN

回答 5

Stack Overflow用户

发布于 2016-07-18 18:38:59

下面的作品

代码语言:javascript
复制
SELECT 
     brand, SUM(sales)/SUM(SUM(sales)) OVER () as sales_share
FROM sales
GROUP BY brand

原始尝试中缺少的是聚合函数-完全像错误消息所说的那样:)

票数 1
EN

Stack Overflow用户

发布于 2016-07-18 18:19:24

如果使用的是sql,则应按所选的每个属性进行分组。所以你的查询应该是这样的:

代码语言:javascript
复制
SELECT 
     brand, SUM(sales)/SUM(sales) OVER () as sales_share
FROM sales
GROUP BY brand, sales
票数 0
EN

Stack Overflow用户

发布于 2016-07-18 18:30:17

你可以使用,

代码语言:javascript
复制
select  
     brand, SUM(sales)as brand_sales
into tmp
from sales 
group by brand

select  brand , 
        total_sales /(select SUM(b.sales) from sales b) as total_sales 
from tmp 

drop table tmp
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38434117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档