#mysql #sql #aggregate-functions #having-clause
#mysql #sql #агрегатные функции #having-предложение
Вопрос:
У меня есть таблица, например, такая:
id_product | id_feature_value |
---|---|
1 | 60 |
2 | 60 |
1 | 40 |
2 | 10 |
Я хочу получить различные id_products, где id_feature_value = 60 и id_feature_value = 40 — это просто пример, потому что мне понадобится фильтр по большему количеству feature_values.
Комментарии:
1.
SELECT DISTINCT id_products WHERE id_feature_value=60 AND id_feature_value=40
. Но это не приведет к выводу, потому что вы должны были сказатьor
, а неand
. 😉2. О скольких
feature_value
значениях вы говорите?
Ответ №1:
Если вам нужны продукты, обладающие обеими функциями, вы можете использовать group by
и having
:
select id_product
from mytable
where id_feature_value in (40, 60)
group by id_product
having count(*) = 2
Это предполагает отсутствие дубликатов. В противном случае вам нужно count(distinct id_feature_value) = 2
.
Вы можете легко расширить это, чтобы обрабатывать больше функций для каждого продукта: вам просто нужно расширить in
предложение и соответствующим образом изменить буквенный номер в having
предложении.
Ответ №2:
либо используя distinct, либо в :
select distinct id_products
from tablename
where id_feature_value IN ( 40, 60 , ...)
или группировать по
select id_products
from tablename
where id_feature_value IN ( 40, 60 , ...)
group by id_products