2011-04-18 32 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