Возникли проблемы с переменными MySQL, что я здесь делаю не так? - PullRequest
0 голосов
/ 29 сентября 2018

См. Ниже и протестируйте здесь .
Я уже несколько часов тяну волосы за это.Я искал много сообщений и, насколько я могу судить, все правильно.
У меня проблемы с сравнением IF и переменной @malefemale.Я могу справиться с этим, объявив переменные в хранимой процедуре без каких-либо проблем, я просто хочу заставить эту чертову штуку работать в онлайн-редакторе выше, чтобы поделиться с другом, и в этом случае, просто чтобы эта чертова штука работала вообще,Что мне не хватает?

create table test(id int, gender varchar(10), salary int);
insert into test(id, gender, salary) values (1, 'male', 40000), (2, 'male', 50000),  (3,'male', 40000), (4, 'female', 60000), (5, 'female', 60000), (6,'female', 40000);

set @m =0;
set @f =0;
set @malefemale = 'same';

select count(*) into @m from test WHERE gender like 'male' and salary >= 50000;
select count(*) into @f from test WHERE gender like 'female' and salary >= 50000;

if @m > @f then
    @malefemale = 'male';
else if @f > @m then
    set @malefemale ='female';
endif

select @malefemale;

Ответы [ 3 ]

0 голосов
/ 29 сентября 2018

Согласно документации mysql, операторы разрешены только в хранимых программах.

Оператор IF для хранимых программ реализует базовую условную конструкцию.

Документация

Однако.Есть ЕСЛИ вы можете использовать.

create table test(id int, gender varchar(10), salary int);
insert into test(id, gender, salary) values (1, 'male', 40000), (2, 'male', 50000),  
(3,'male', 40000), (4, 'female', 60000), (5, 'female', 60000), (6,'female', 40000);

set @m =0;
set @f =0;

select count(*) into @m from test WHERE gender like 'male' and salary >= 50000;
select count(*) into @f from test WHERE gender like 'female' and salary >= 50000;


select if (@m > @f, 'male', 'female')

Для объяснения:
выберите, если ([СОСТОЯНИЕ], [ТОГДА], [ДАЛЕЕ])

И поскольку я не могу прокомментировать ваш вопрос.Отрицательное голосование может быть из-за вашей ненужной ругательства.Я могу понять, что вы расстроены, но, может быть, одного "проклятого" будет достаточно.

0 голосов
/ 29 сентября 2018

Я согласен с ответом Гордона Линоффа , но, поскольку я пока не могу комментировать, я просто хотел бы исправить две вещи в коде:

select (case sign(sum(gender = 'male') - sum(gender = 'female') )
             when 1 then 'male' 
             when -1 then 'female'
             when 0 then 'same'
        end)
from test;

Условие было добавленокогда количество полов равно (одинаково), что также является ожидаемым ответом.Условие where gender like 'male' было удалено, что ограничивало поиск только полом «мужской».

0 голосов
/ 29 сентября 2018

Переменные совершенно не нужны для этого запроса:

select (case sign(sum(gender = 'male') - sum(gender = 'female') )
             when 1 then 'male'
             when -1 then 'female'
             when 0 then 'same'
        end)
from test 
where gender like 'male' ;

Если вы используете это как код MySQL, то ваша проблема, вероятно, не в переменных, а в if.Это разрешено только в блоках программирования - подумайте о хранимых процедурах, функциях и триггерах.

...