我有两张桌子:
购买:
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;
现在我只需要一种方法来获取具有该数量的项目的名称。
答案 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