SQL添加计数列基于同一个表并按另一列分组

时间:2016-10-06 09:13:01

标签: sql dashdb

我很欣赏这有点奇怪,但我需要这样做,因为下一个数据报告步骤以这种特定格式中继数据。假设我有一张表:

ID | Type   | Item  
----------------------
1  | red    | apple  
2  | red    | apple  
3  | green  | apple  
4  | red    | berry  
5  | red    | berry  
6  | green  | banana  
7  | yellow | lemon   

我现在需要的是在SELECT *查询中添加一个列,它将在每个记录中告诉我在WHOLE查询中有多少条具有相同类型的记录。所以我要找的输出是:

ID | Type   | Item   | count of type  
-------------------------------------
1  | red    | apple  |  4  
2  | red    | apple  |  4    
3  | green  | apple  |  2  
4  | red    | berry  |  4  
5  | red    | berry  |  4  
6  | green  | banana |  2  
7  | yellow | lemon  |  1  

我知道我可以做一个子查询,但实际数据要复杂得多(公式和连接遍布各处),每次添加子查询都会使整个查询变得有点混乱。所以只是想知道我是否可以在主查询中“直接”以某种方式对此进行计数?或许你们还有另一个想法。你怎么看。我正在开发dashDB

3 个答案:

答案 0 :(得分:2)

您可以使用分区:

select ID, Type, Item, count(ID) over(partition by Type) as CountOfType
From table

答案 1 :(得分:1)

您可以按类型和项目分组来计算每个项目和类型

SELECT t1.ID, t1.Type, t1.Item, t2.CountType
FROM tableName t1
JOIN ( SELECT Type, Item,COUNT(*) As CountType 
       FROM tableName
       GROUP BY Type, Item
     ) As t2

ON t1.Type = t2.Type AND t1.Item = t2.Item

答案 2 :(得分:1)

您可以使用分析函数,将以下内容添加到SELECT查询Count(*) over (partition by Type) as countOfType