2016-04-02 2 views
0
SELECT 
    t1.user_id, 
    count(*) total, 
    sum(case when t1.var1 = 'yes' then 1 else 0 end) as type1, 
    sum(case when t1.var1 = 'no' then 1 else 0 end) as type2 
FROM table as t1 
WHERE type1 > 0 
GROUP by t1.user_id 
ORDER by type1 DESC 
LIMIT 100 

В результате я получаю строки:mysql - почему условие, где не работает?

user_id total type1 type2 
    1  100 80  20 
    4  120 70  50 
    6  90  0  90 

Скажите, пожалуйста, почему состояние WHERE type1 > 0 не работает и как выбрать строки с этим условием?

+0

сделайте скрипт sql для этих вопросов, это облегчит нам попробовать материал: http://sqlfiddle.com/ – Jester

+0

... и показать исходные таблицы (и их данные), с которыми вы запрашиваете. – Stuart

ответ

1

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

SELECT 
t1.user_id, 
count(*) total, 
sum(case when t1.var1 = 'yes' then 1 else 0 end) as type1, 
sum(case when t1.var1 = 'no' then 1 else 0 end) as type2 
FROM table as t1 
GROUP by t1.user_id 
HAVING type1 > 0 
ORDER by type1 DESC 
LIMIT 100 

Смотрите здесь для другого примера использования HAVING: http://www.w3schools.com/sql/sql_having.asp

+0

Нет проблем :) Не забудьте отметить ответ, чтобы ваш вопрос не отображался как нерешенный, но только если у вас больше нет вопросов об этом, в противном случае я был бы рад ответить на любые дальнейшие вопросы об этом ^^ – Jester

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