3

仮想テーブルには、次の列が含まれています。

id integer,
name char(6),
status integer

また、次のデータがあります。

id    id2     type
---   -----   ----
01    Adam    1
02    Bob     1
03    Adam    2
04    Caymen  1
05    Ahmed   1
06    Basel   1
07    Ahmed   2
08    Bob     2
09    Ahmed   2
10    Mike    1

したがって、基本的には、さまざまなユーザーのステータスの進行を追跡します。

ステータスの数でグループ化したい。つまり、ステータスが 1 つしかないユーザー、ステータスが 2 つあるユーザー、ステータスが 3 つあるユーザーの数などを知りたいのです。

予想される出力は次のようになります。

num_of_statuses    count
---------------    -----
1                  3
2                  2
3                  1       

持ってみましたが、まだ解決策が見つかりません。どんな構文でもOKです。SQL/MySQL/DB2/オラクル。

4

4 に答える 4

8

次のようなネストされたクエリが必要になります。

select num_of_statuses, count(*)
from (
    select id2, count(*) as num_of_statuses
    from table1
    group by id2
) A
group by num_of_statuses

sqlfiddle で参照してください: http://sqlfiddle.com/#!2/ed95e/1

于 2012-04-30T22:14:48.273 に答える
5
WITH summary (fname, num_of_statuses) AS
(    SELECT fname, COUNT(*) num_of_statuses 
     FROM basetablename GROUP BY fname
)
SELECT num_of_statuses, COUNT(*) AS peoplecount
FROM summary
GROUP BY num_of_statuses
;
于 2012-04-30T22:17:20.447 に答える
2

ネストされたクエリを使用したくない場合は、次のように回避できます。

SELECT DISTINCT
  num_of_statuses = COUNT(*),
  count           = COUNT(*) OVER (PARTITION BY COUNT(*))
FROM atable
GROUP BY id
于 2012-05-02T08:31:16.050 に答える