2010-04-03 2 views
1

У меня есть этот запрос:MySQL - Выбор строки с минимальным числом вхождений

SELECT DISTINCT brand_name FROM masterdata WHERE in_stock = '1' ORDER BY brand_name 

Он работает хорошо, за исключением того, что я получаю слишком много результатов. Как ограничить это так, что вместо того, чтобы просто искать разные записи, это даст мне только отдельные записи, которые существуют как минимум в 3 раза (например)?

В основном, если столбец имел эти данные ...

brand_name 
========== 
apple 
banana 
apple 
apple 
orange 
banana 
orange 
orange 

... мой текущий запрос будет возвращать "яблоко, банан, апельсин". Как получить его таким образом, чтобы он возвращал только «яблоко, апельсин» (игнорируя банан, потому что он имеет менее трех случаев)?

Я использую PHP для построения запроса, если это имеет значение.

Спасибо!

ответ

3

Что-то вроде этого (неподготовленный и непроверенных):

SELECT brand_name 
    FROM masterdata 
WHERE in_stock = '1' 
GROUP BY brand_name 
HAVING COUNT(*) >= 3 
ORDER BY brand_name 
+0

Это отлично - он работает, спасибо! Еще один вопрос, если бы вы были добры: что бы мой запрос был, если бы я хотел показать первые 15 записей в brand_name с наивысшей частотой, но упорядочен по алфавиту (а не по частоте)? Итак, теперь я не определяю минимальное количество вхождений, а верхние 15 записей с наибольшим количеством вхождений. –

+0

@RC: это должен быть новый вопрос. – outis