我有一个名字和一个类别。输入名称后,我想猜测该类别。
E.g。
名称 - 类别
Tesco - Groceries
Tesco - Groceries
特易购 - 游戏
我想要回来的是1结果。然而,它并不像返回'Groceries'那么简单。理想情况下,如果至少有50%的时间进入杂货店,我想只返回杂货吗?如果没有,我想只返回Groceries至少5次。
我有这个,但它不起作用。
SELECT DISTINCT(category) FROM records WHERE name='$name' AND count(category) > 5 ORDER BY count(category) DESC LIMIT 1;
答案 0 :(得分:3)
您应该group by
类别并使用having
子句仅返回5行或更多行的类别。
使用distinct
后,您也无需使用group by
。
这样的事情对你有用:
SELECT category
FROM records
WHERE name='$name'
GROUP BY category
HAVING count(*) > 5
ORDER BY count(*)
DESC LIMIT 1
答案 1 :(得分:2)
作为Ike答案的补充,如果表格中没有任何项目出现次数超过5次但出现次数超过50%的话,您还想查询工作:
SELECT category
FROM records
WHERE name='$name'
GROUP BY category
HAVING count(*) >= 5 OR count(*) / (SELECT count(*) FROM records) >= 0.5
ORDER BY count(*)
DESC LIMIT 1
答案 2 :(得分:0)
select
distinct(category)
from records
where
name = '$name'
group by category
having (count(*) > 5)
order by count(*)
limit 1