1

結果セットがあるとしましょう...次のように出力する必要があります。

ID  Count
1    5
1    5 
1    5
1    5
1    5
2    2
2    2
3    1

前もって感謝します。

4

2 に答える 2

8

count()で使用できます:OVER

select a, count(*) over (partition by a) as [count]
from tableName ;

ウィンドウ関数といいます。これらを勉強することをお勧めします。

于 2012-08-01T21:09:07.873 に答える
8

クエリの意味は次のとおりです。

SELECT ID, COUNT(*) AS "Count"
FROM tableX
GROUP BY ID ;

これを生成します:

ID  Count
1    5
2    2
3    1

しかし、あなたはこれが欲しいですか?:

ID  Count
1    5
1    5 
1    5
1    5
1    5
2    2
2    2
3    1

次に、このクエリは次のことを行います。

SELECT grp.ID, grp."Count"
FROM 
        tableX AS t
    JOIN
        ( SELECT ID, COUNT(*) AS "Count"
          FROM tableX
          GROUP BY ID 
        ) AS grp
      ON grp.ID = t.ID ;

ほとんどすべての DBMS と SQL-Server のすべてのバージョンで動作します。SQL-Server バージョン 2005 以降 (および Oracle と Postgres の場合) では、OVER句を使用した回答がよりエレガントに見え、好まれる可能性があります。あなたのバージョンでどちらがより効率的かをテストしてください。OVER2012年版では、句を使ったクエリがかなり効率的だと思います。

于 2012-08-01T21:09:24.923 に答える