SQL - 计数和分组依据,选择*来自

时间:2017-09-14 06:53:22

标签: sql group-by count

我有一张包含27个列的表,我必须从这个表中算出一些内容,如下所示:

OPP_ID           ACC_ID
--------------------------
1                A
2                B
3                B
4                A
5                C
6                D
7                A
8                E

我需要这个:

{{2} }

所以我想计算ACC_ID并需要一个新列,其中包含特定ACC_ID在表中的频率,例如ACC_ID = A在表格中是3次,所以我希望在每个ACC_ID值后面的新列中使用值为3的A。

我已经尝试了这个但是我找不到完美的解决方案。 我使用了OPP_ID ACC_ID count ----------------------------------- 1 A 3 2 B 2 3 B 2 4 A 3 5 C 1 6 D 1 7 A 3 8 E 1 但如果我使用group by function

我就不能用select *输出整个表格

4 个答案:

答案 0 :(得分:3)

使用窗口函数(如果您的DBMS支持它)

SELECT OPP_ID, ACC_ID, COUNT(*) OVER (PARTITION BY ACC_ID) FROM table

答案 1 :(得分:1)

SELECT A.*, B.[Count]
FROM MyTable A
INNER JOIN (
    SELECT ACC_ID, Count(*) AS [Count]
    FROM MyTable 
    GROUP BY ACC_ID
) B ON B.ACC_ID = A.ACC_ID

答案 2 :(得分:0)

如果您使用的是MS SQL Server,请尝试以下操作:

SELECT T.OPP_ID, S.ACC_ID, S.COUNT FROM
(
    SELECT ACC_ID, COUNT(*) COUNT FROM #TEMP GROUP BY ACC_ID
) S
INNER JOIN #TEMP T ON T.ACC_ID = S.ACC_ID

答案 3 :(得分:0)

SELECT A.OPP_ID,A.ACC_ID,COUNT(R) COUNT FROM MYTABLE A INNER JOIN(
SELECT OPP_ID,ACC_ID ,DENSE_RANK() OVER (PARTITION BY ACC_ID ORDER BY OPP_ID) R FROM MYTABLE) B 
ON A.ACC_ID=B.ACC_ID GROUP BY A.ACC_ID,A.OPP_ID