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 回答