我有一张这样的桌子:

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

我想找出哪个ID,一个ID的品牌组合超过50%。例如:这里的结果应该是
ID | brand
2 | 300

as(2300)在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 fiddle

最佳答案

这是我第一次尝试。

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

SQLFiddle Demo
SQLFiddle Demo

关于mysql - 查找哪个条目出现在Mysql中的最大时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14662040/

10-11 02:47
查看更多