1

私はこのようなテーブルを持っていますT:

ID | brand
2 | 100
2 | 300
2 | 300
1 | 100
1 | 200

ID の 50% を超える ID とブランドの組み合わせを見つけたいです。例:ここでは、結果は次のようになります

ID | brand
2 | 300

(2,300) は ID 2 で 3 回中 2 回発生します。ID1 では、両方の組み合わせが 50% 回であるため、ID 1 の行はありません。
今、私は次のようにアプローチしました:
まず、各 ID、ブランドの組み合わせの数を見つけました:

(select id,brand,count(*) c from T group by id,brand) as F

次に、上記の基準を満たすすべての ID をリストします

select ID from F group by ID having max(c)/count(*) > 0.5

それは完全に機能しますが、問題は、上記のクエリで次のように指定したため、対応するブランドを取得できないことです

select ID, brand ...

次に、常にテーブルの最初のブランドを提供します。
これがSQLフィドルです

4

1 に答える 1

3

これが私の最初の試みです。

SELECT ID, BRAND
FROM
(
  SELECT t.ID, t.BRAND, s.TotalCount, 
          COUNT(*) * 1.0 / s.TotalCount Percentage
  FROM   T
         INNER JOIN
        (
          SELECT ID, COUNT(*) totalCOunt
          FROM   T
          GROUP  BY ID
        ) s ON T.ID = s.ID
  GROUP  BY ID, BRAND
  HAVING (COUNT(*) * 1.0 / s.TotalCount) > 0.5
) r
于 2013-02-02T12:57:38.717 に答える