0

私はテーブルを持っています:

ID CLUSTERID
1     56
1     24
1     24
1      35
2      13
2      24

今、私は次のことを取得したいと考えています: ID ごとにカウントしたいのですが、どのクラスター ID がほとんどの場合繰り返されます。たとえば、ID=1 では、CLUSTERID=24 がほとんどの場合繰り返されます。ID=2 では、同じことを繰り返す 2 つの CLUSTER ID があります。したがって、出力には次のようになります。

ID CLUSTERID
1   24
2   13
2  24

私が書いた(そして機能する)答え
TT は、ID と CLUSTER ID の 2 つの列を持つ元のテーブルです。

SELECT t3.ID,t3.ClusterID,t3.ListingAmount
FROM
(SELECT ID, ClusterID, COUNT( ) AS ListingAmount
FROM tt
GROUP BY ID, ClusterID) AS t3 LEFT JOIN
(SELECT ID, MAX(ListingAmount) AS amount
FROM
(SELECT ID , ClusterID, COUNT(
) AS ListingAmount
FROM tt
GROUP BY ID, ClusterID) AS t2
GROUP BY ID) AS BB ON BB.id=t3.id
WHERE BB.amount=t3.ListingAmount

4

1 に答える 1

0

今はもっとエレガントな解決策を考えることはできませんが(確かにあると思います)、それは仕事をしているようです:

select t1.id, 
       t1.clusterid,
       t1.cnt
from (
    select id, 
           clusterid, 
           count(*) as cnt
    from foo
    group by id, clusterid
) t1 
  join (select id, 
                max(cnt) as max_count
        from (       
            select id, 
                   clusterid, 
                   count(*) as cnt
            from foo
            group by id, clusterid
        ) tm
        group by id
  ) t2 on t1.id = t2.id 
      and t1.cnt = t2.max_count
order by t1.id, t1.cnt;

SQLFiddle の例: http://sqlfiddle.com/#!2/2cacc/3

于 2013-04-10T09:58:22.437 に答える