MySQL:查找表中最常出现的值

时间:2015-03-04 13:51:34

标签: mysql

我有两张桌子:

购买:

item
001
003
002
001
002
004
003
001
002

项目:

id    |   name
001   |   Item 1
002   |   Item 2
003   |   Item 3
004   |   Item 4

我需要找到购买表中最常出现的(多个)项目,并输出项目的名称。我的查询应该包含哪些内容?

更新(使用MAX和子查询)

我可以通过以下方式获得最高分:

SELECT MAX(cnt) FROM 
    (SELECT COUNT(*) AS "cnt" 
    FROM purchases LEFT JOIN item ON item.id = purchases.item 
    GROUP BY purchases.item) t;

现在我只需要一种方法来获取具有该数量的项目的名称。

3 个答案:

答案 0 :(得分:1)

我没有测试过,但试试这个。

SELECT COUNT(*) AS "count", item.id, item.name
FROM purchases
LEFT JOIN item ON item.id = purchase.item
GROUP BY item.id
ORDER BY count DESC

这假设purchases中的外键是item而不是item_id

答案 1 :(得分:1)

试试这个:

SELECT t.cnt, t.name FROM 
 (SELECT COUNT(*) AS "cnt", item.name 
  FROM purchases 
  LEFT JOIN item ON item.id = purchases.item 
  GROUP BY item.name) t
WHERE t.cnt = (SELECT MAX(t2.cnt) FROM 
 (SELECT COUNT(*) AS "cnt"
   FROM purchases 
   LEFT JOIN item ON item.id = purchases.item 
   GROUP BY item.name) t2
 )

我确定它必须是更好的方法,但这应该有效。

答案 2 :(得分:0)

这是一个简单快捷的查询:

SELECT b.name, count(a.item) as total, 
FROM purchases a 
LEFT JOIN item b ON  a.item = b.id
GROUP BY b.name
ORDER BY 2 DESC