4

Oracle SQLでは、通常の列の横にcount(*)列を返すにはどうすればよいですか?

機能するもの:

select count(*) from TABLE where username = 'USERNAME';

やりたいこと:

select username,count(*) from TABLE where username = 'USERNAME';

したがって、これを多数のユーザー名とそのレコード数をリストする別のクエリに拡張するために、カウントの横にユーザー名が必要です。

エラー:

ORA-00937: not a single-group group function
00937. 00000 -  "not a single-group group function"
*Cause:    
*Action:
Error at Line: 7 Column: 7

質問:

それで、どうすればいいですか?

4

1 に答える 1

12
SELECT username,count(*) from TABLE WHERE username='USERNAME' GROUP BY username

トリックを行う必要があります!

最初のクエリが機能する理由は、MySQL がそのクエリを集計クエリに自動的に変換できるためです。これは、username='USERNAME' のすべての行をカウントする必要があることを MySQL が「理解している」ためです。2 番目のクエリは十分に明確ではありません。クエリによって選択された行に対して集計関数を実行しようとしていますが、クエリの行も必要です。私のクエリは、セットから返されるユーザー名は 1 つだけであることを期待していることを明確に示しているため、集計は問題になりません。

于 2012-06-26T15:23:07.787 に答える