2013-03-25 2 views
-1

Хорошо, это работает:SQL заявление с помощью встроенного Выбирается

SELECT DISTINCT(USER), COUNT(DISTINCT (USER)) AS numrows 
FROM `sometable` 
GROUP BY USER 
ORDER BY USER asc 
LIMIT 0, 20 

Что мне нужно сделать сейчас, чтобы ограничить результаты NumRows> X. перепробовали множество решений с использованием встроенных выбирает, но не повезло.

+0

Извините. Но ИМХО, ваш вопрос непонятен. – alerya

ответ

2
SELECT 
    DISTINCT(USER), 
    COUNT(DISTINCT (USER)) AS numrows 
FROM 
    `sometable` 
GROUP BY 
    USER 
HAVING 
    COUNT(DISTINCT (USER)) > 10 
ORDER BY 
    USER asc 
LIMIT 0, 20 

HAVING, как WHERE, но применяется к уже сгруппированных данных. Вы можете использовать его для фильтрации некоторых групп, которые не соответствуют вашим требованиям.

+0

Да, это сделал трюк. Приветствия. Забыли о HAVING. Благодаря! –

+0

Один вопрос, который я только что заметил. значение numrows больше не корректно - только правильно, если> 0. Дает такое же значение независимо от значения в разделе HAVING. Значение моего исходного SQL-запроса, которое не использует HAVING. –

1

Вы можете опустить DISTINCT ключевое слово, потому что вы уже группируете его. И отфильтровать результат агрегированного столбца, используйте HAVING:

SELECT USER, 
     COUNT(DISTINCT USER) AS numrows 
FROM sometable 
GROUP BY USER 
HAVING COUNT(DISTINCT USER) > ??? -- << define the value here 
ORDER BY USER asc 
LIMIT 0, 20 

HAVING и WHERE являются фильтрации ключевых слов, но разница в том, что их HAVING поддерживает использование агрегатной функции, которые будут фильтроваться, а WHERE не может.

Смежные вопросы