2013-06-07 4 views
0

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

select kapsule.owner_name, 
     kapsule.owner_domain, 
     count(xform_action) 
    from kapsule, rec_xform 
where rec_xform.g_conf_id=kapsule.g_conf_id 
    and (count(xform_action))%2=0 
group by kapsule.owner_name; 

Я хочу сохранить только те значения, где count (xform_action) равно. Таблица выглядит так.

+0

Попробуйте следующее: - выберите kapsule.owner_name, kapsule.owner_domain, count (xform_action) из kapsule, rec_xform, где rec_xform.g_conf_id = kapsule.g_conf_id group by kapsule.owner_name having (count (xform_action))% 2 = 0; – Deepika

ответ

0

Чтобы отфильтровать набор результатов после GROUP BY вам нужно использовать HAVING пункт. Предложение WHERE используется для фильтрации исходных строк до появления GROUP BY.

Попробуйте

SELECT k.owner_name, 
     k.owner_domain, 
     COUNT(x.xform_action) cnt -- < you probably meant to use SUM() instead of COUNT() here 
    FROM kapsule k JOIN rec_xform x -- < use JOIN notation for clarity 
    ON x.g_conf_id = k.g_conf_id 
GROUP BY k.owner_name 
HAVING cnt % 2 = 0 

вероятно Вы имели в виду использовать SUM() (суммы значений столбца всех строк в группе) агрегирование вместо COUNT() (возвращает количество строк в группе)

Вот SQLFiddle демо (как для SUM() и COUNT())

+0

Спасибо, это сработало. –

0

Для агрегатных функций, таких как COUNT(*) с помощью GROUP BY вам нужно использовать HAVING Пунктом

select kapsule.owner_name, kapsule.owner_domain, 
count(xform_action) from kapsule, rec_xform 
where rec_xform.g_conf_id=kapsule.g_conf_id and 
group by kapsule.owner_name, kapsule.owner_domain 
HAVING (count(xform_action))%2=0 

или вы можете использовать псевдоним (т.е. AS), как:

select kapsule.owner_name, kapsule.owner_domain, 
count(xform_action) count_form from kapsule, rec_xform 
where rec_xform.g_conf_id=kapsule.g_conf_id and 
group by kapsule.owner_name, kapsule.owner_domain 
HAVING count_form%2=0 

И вы могли бы использовать JOIN как более эффективный чем старый, соединяющий столы. И кстати если у вас есть GROUP BY поля, прежде чем совокупная функция должна быть в GROUP BY, как:

select kapsule.owner_name, kapsule.owner_domain, 
count(xform_action) count_form from kapsule A 
INNER JOIN rec_xform B 
ON A.g_conf_id=B.g_conf_id and 
GROUP BY by A.owner_name, A.owner_domain 
HAVING count_form%2=0 

Смотрите примеры here

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