2011-04-18 36 views
3

我有一个名字和一个类别。当名字输入时,我想猜猜这个类别。MySQL - 按发生顺序?

E.g.

名称 - 类别

特易购 - 杂货

特易购 - 杂货

特易购 - 游戏

我想要得到的回复是1的结果。但是,它不像返回“杂货”那么简单。理想情况下,我只想返回杂货店,如果这是至少进入50%的时间?如果没有输入至少5次,我只想返回杂货店。

我有这个,但它不工作。

SELECT DISTINCT(category) FROM records WHERE name='$name' AND count(category) > 5 ORDER BY count(category) DESC LIMIT 1; 

请问有人可以帮忙。

回答

3

您应该使用group by类别并使用having子句仅返回5行或更多的类别。如果您使用group by,您也不需要使用distinct

像这样的东西应该为你工作:

SELECT category 
FROM records 
WHERE name='$name' 
GROUP BY category 
HAVING count(*) > 5 
ORDER BY count(*) 
DESC LIMIT 1 
2

作为除艾克的回答,如果你也想查询工作,如果有在表中出现超过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 
+0

小挑 “> = 0.5”,否则+1 – Jaydee 2011-04-18 14:58:37

+0

感谢,更新了!我们实际上也需要> = 5(至少5项) – 2011-04-18 14:59:01

0
select 
    distinct(category) 
from records 
where 
    name = '$name' 
group by category 
having (count(*) > 5) 
order by count(*) 
limit 1