SQL 添加基于相同 table 的计数列并按另一列分组

SQL add count column based on same table and grouped by another column

我知道这有点奇怪,但我需要这样做,因为接下来的数据报告步骤依赖于这种特定格式的数据。假设我有一个 table 像:

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 * 查询添加一列,该列将在每条记录中告诉我整个查询中有多少条记录具有相同的类型。所以我正在寻找的输出是:

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  

我知道我可以做一个子查询,但实际数据要复杂得多(到处都是公式和连接),每次我添加一个子查询都会使整个查询有点混乱。所以只是想知道我是否可以在主查询中以某种方式 "directly" 进行计数?或者也许你们还有另一个想法。你怎么看。我正在研究 dashDB

您可以按类型和项目 GROUP 以获取每个项目和类型的计数

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

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

您可以通过以下方式使用分区:

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