2011-12-28 5 views
3

Использование производного значения в предложении MySQL WHERE не работает. Есть ли способ имитировать такое поведение? Ниже приведен пример запроса, который не удается из-за WHERE count > 5 линии:Можно ли использовать функцию запроса MySQL в предложении WHERE?

SELECT 
    title, 
    company_id, 
    count(id) as count 
FROM 
    table 
WHERE 
    count > 5 
GROUP BY 
    title, 
    company_id 

ответ

8

Агрегаты не могут использоваться в WHERE, а скорее в HAVING. И вам нужно будет добавить пункт GROUP BY.

SELECT 
    title, 
    company_id, 
    count(id) as count 
FROM 
    table 
GROUP BY title, company_id 
HAVING count > 5 
5

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

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

SELECT 
    title, 
    company_id, 
    count(id) as count 
FROM 
    table 
GROUP BY 
    title, company_id 
HAVING 
    count > 5 

UPDATE: В этом случае вы должны использовать HAVING положение, но я хотел бы отметить одну вещь, чтобы иметь в виду при использовании HAVING положение. MySQL documentation утверждает, что:

Предложение HAVING применяется почти последним, непосредственно перед отправкой товара клиенту, без оптимизации. (LIMIT применяется после HAVING.)

Так что, как указано в той же документации:

Не используйте HAVING для элементов, которые должны быть в ИНЕКЕ.

1

Вы не можете использовать WHERE на общей колонке.

Попробуйте это:

SELECT 
     title, 
     company_id, 
     count(id) as cnt 
    FROM 
     table 
    GROUP BY title, company_id 
    HAVING 
     cnt > 5 
Смежные вопросы