2011-04-18 3 views
3

이름과 카테고리가 있습니다. 이름이 입력되면 카테고리를 추측하고 싶습니다.MySQL - 출현 순서?

예.

이름 - 카테고리

테스코 - 식료품

테스코 - 식료품

테스코 - 게임

내가 다시 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

+0

덕분에, 그것을 업데이트! 우리는 실제로 5 이상을 필요로합니다 (적어도 5 개 항목) –

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