MySQL - 按发生顺序排序?

时间:2011-04-18 14:38:00

标签: mysql

我有一个名字和一个类别。输入名称后,我想猜测该类别。

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;

3 个答案:

答案 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
相关问题