(решено)MYSQL сверка результата COUNT на стороне БД

Модератор: Модераторы

(решено)MYSQL сверка результата COUNT на стороне БД

Сообщение vitaly_l » 06.11.2017 16:49:35

Всем привет.
Дана MYSQL и в ней есть примерно такой запрос:
Код: Выделить всё
SELECT COUNT(`some_id`) as test FROM `ostalnoe_pofig` ;

Соответственно, всё что я получаю это некое число записанное в test.

И мне нужно сравнить этот результат что-то типа: WHERE test > 5
Код: Выделить всё
SELECT COUNT(`some_id`) as test FROM `ostalnoe_pofig` WHERE test > 5;

WHERE test > 5, естественно не работает.

Я что-то подобное когда-то делал и обращался к переименованным AS переменным, но не помню как и где. :cry:
:roll: Пожалуйста не бейте сапогами, но подскажите, как оно правильно, у MySQL - вышеизложенное спросить?

Спасибо.
Последний раз редактировалось vitaly_l 06.11.2017 20:23:59, всего редактировалось 4 раз(а).
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: MYSQL сверка результата COUNT на стороне БД

Сообщение kosteek » 06.11.2017 17:01:54

Уточните что нужно сравнить и что получить.
Код: Выделить всё
SELECT IF(COUNT(`some_id`) > 5,'Больше пяти', 'Пять или меньше') FROM `ostalnoe_pofig`;
kosteek
постоялец
 
Сообщения: 203
Зарегистрирован: 24.07.2008 14:57:09
Откуда: Украина, г.Славянск

Re: MYSQL сверка результата COUNT на стороне БД

Сообщение vitaly_l » 06.11.2017 17:11:59

kosteek писал(а):Уточните что нужно сравнить и что получить.

Вы в принципе почти правильно поняли задачу.
Код: Выделить всё
IF(COUNT(`some_id`) > 5)

Но это не работает, возможно потому что у меня, там, более сложный запрос.

Мне нужно сравнить значение лежащее в переменной TEST переименованной силами AS.
Сам результат TEST мне не нужен. У меня с использованием Вашего примера получилось:
Код: Выделить всё
SELECT `some_id`, IF(COUNT(`some_id`)>5 ) FROM `tab` WHERE `some_id` IN (1,2,3,4,5) GROUP BY `some_id`;
//где `some_id` не уникальный индекс и их много одинаковых.

И она вернула неправильный результат.

Как к созданной силами AS переменной TEST обратиться в MySQL?
или как на стороне MySQL проверить что COUNT > 5 ?
и если результат больше 5 то она должна мне вернуть `some_id` а если нет, то вернуть пустоту.


должно получиться что-то примерно "такое":
Код: Выделить всё
SELECT `some_id`, COUNT(`some_id`) as test FROM `tab` WHERE ( IF (test > 5)=true ) AND `some_id` IN (1,2,3,4,5) GROUP BY `some_id`;

точнее из вышеприведённого примера можно понять что требуется сделать...


/
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: MYSQL сверка результата COUNT на стороне БД

Сообщение kosteek » 06.11.2017 18:41:47

А если так
Код: Выделить всё
SELECT IF (COUNT(`some_id`) > 5,`some_id`,NULL) as test  FROM `tab` WHERE test is NOT NULL AND `some_id` IN (1,2,3,4,5) GROUP BY `some_id`;


если нужно вывести кол-во `some_id` то можно так
Код: Выделить всё
SELECT IF (COUNT(`some_id`) > 5,`some_id`,NULL) as test, COUNT(`some_id`) as count_test  FROM `tab` WHERE test is NOT NULL AND `some_id` IN (1,2,3,4,5) GROUP BY `some_id`;
Последний раз редактировалось kosteek 06.11.2017 18:47:26, всего редактировалось 1 раз.
kosteek
постоялец
 
Сообщения: 203
Зарегистрирован: 24.07.2008 14:57:09
Откуда: Украина, г.Славянск

Re: MYSQL сверка результата COUNT на стороне БД

Сообщение vitaly_l » 06.11.2017 18:47:16

kosteek писал(а):А если так

Если так..., то у меня честно говоря - башню снесло... Но, если это сработает... <== то, это будет УЯ!
Сейчас попробую, отпишусь.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: MYSQL сверка результата COUNT на стороне БД

Сообщение kosteek » 06.11.2017 18:51:43

Объясню что происходит в скрипте:
Код: Выделить всё
IF (COUNT(`some_id`) > 5,`some_id`,NULL)

Сравнение делается в секции SELECT. Сравниваем COUNT(`some_id`) > 5, если ИСТИНА то выводим `some_id`, если лож, то NULL.
Код: Выделить всё
WHERE test is NOT NULL

Условие отбора - указываем не отображать пустые (NULL), которые в секции SELECT при сравнении дают ЛОЖ.
kosteek
постоялец
 
Сообщения: 203
Зарегистрирован: 24.07.2008 14:57:09
Откуда: Украина, г.Славянск

Re: MYSQL сверка результата COUNT на стороне БД

Сообщение vitaly_l » 06.11.2017 18:59:05

Код: Выделить всё
Ответ MySQL: Документация

#1064 - У вас ошибка в запросе. Изучите документацию по используемой версии MySQL на предмет корректного синтаксиса
около '> 5,`some_id`,NULL) as test FROM `tab` WHERE test is NOT NULL AND ... на строке 1


Добавлено спустя 5 минут 55 секунд:
Наверное такое возможно в каких-то других БД, а не в MySQL :cry: .

Добавлено спустя 3 минуты 33 секунды:
При этом первая часть запроса правильная, и MySQL не ругается, а вот на вторую часть: test is NOT NULL <== ругается
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: MYSQL сверка результата COUNT на стороне БД

Сообщение kosteek » 06.11.2017 19:15:09

Да, есть такое, вот так работает, проверил
Код: Выделить всё
SELECT IF (COUNT(`some_id`) > 5,`some_id`,NULL) as test, COUNT(`some_id`) as count_test  FROM `tab` WHERE `some_id` IN (1,2,3,4,5) GROUP BY `some_id`;


Добавлено спустя 14 минут 58 секунд:
Мда, работать будет так
Код: Выделить всё
SELECT * from (SELECT IF (COUNT(`some_id`) > 5,`some_id`,NULL) as test, COUNT(`some_id`) as count_test  FROM `tab` WHERE `some_id` IN (1,2,3,4,5) GROUP BY `some_id`) t WHERE t.test is not null;
kosteek
постоялец
 
Сообщения: 203
Зарегистрирован: 24.07.2008 14:57:09
Откуда: Украина, г.Славянск

Re: (решено)MYSQL сверка результата COUNT на стороне БД

Сообщение vitaly_l » 06.11.2017 19:35:57

kosteek писал(а):Да, есть такое, вот так работает, проверил

Что-то не то тесты не проходят.

Добавлено спустя 22 минуты 2 секунд:
Re: MYSQL сверка результата COUNT на стороне БД
kosteek писал(а):SELECT * from (SELECT IF (COUNT(`some_id`) > 5,`some_id`,NULL) as test, COUNT(`some_id`) as count_test  FROM `tab` WHERE `some_id` IN (1,2,3,4,5) GROUP BY `some_id`) t WHERE t.test is not null;

Вот этот вариант тесты проходит, СПАСИБО БОЛЬШОЕ!

Но здесь второй SELECT, а мне кажется, что я делал как-то без второго SELECT и как-то напрямую обращался ещё в первом SELECT. И кстати оператор IF при использовании второго SELECT => лишний, потому что, при втором SELECT можно ей говорить WHERE t.test > 5; без использования IF.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: MYSQL сверка результата COUNT на стороне БД

Сообщение kosteek » 06.11.2017 20:16:08

Я не знаю по какой причине, но MySQL, в секции WHERE, не оперирует с алиасами, объявленными в секции SELECT.
Подсмотрел как делают в инете и увидел примеры со вторым SELECT.
kosteek
постоялец
 
Сообщения: 203
Зарегистрирован: 24.07.2008 14:57:09
Откуда: Украина, г.Славянск

Re: (решено)MYSQL сверка результата COUNT на стороне БД

Сообщение olegy123 » 06.11.2017 23:14:21

vitaly_l писал(а):WHERE test > 5, естественно не работает.

Это филтр по полю test, когда test будет больше 5, кол-во Row суммируются.
vitaly_l писал(а):Соответственно, всё что я получаю это некое число записанное в test.

получите кол-во полученных записей.

Добавлено спустя 51 секунду:
kosteek писал(а):IF (COUNT(`some_id`) > 5,`some_id`,NULL)

Зачем нулить? Бррр.

Добавлено спустя 3 минуты 25 секунд:
vitaly_l писал(а):SELECT IF (COUNT(`some_id`) > 5,`some_id`,NULL) as test, COUNT(`some_id`) as count_test FROM `tab` WHERE `some_id` IN (1,2,3,4,5) GROUP BY `some_id`

если значения `some_id` IN (1,2,3,4,5) -тогда выводим.
но COUNT - это подсчет Row(количество записей в таблице)..
IF (COUNT(`some_id`) > 5,`some_id`,NULL) as test, COUNT(`some_id`) - это что хотели сказать? типа
Код: Выделить всё
NULL,1
NULL,2
..
NULL,5
6,6
?

Добавлено спустя 5 минут 25 секунд:
Может проще:
SELECT t1.test FROM (SELECT COUNT(`some_id`) as test FROM `ostalnoe_pofig`) as t1 where t1.test>5;
Тогда либо NULL либо >5
Но проще еще
SELECT IF (COUNT(`some_id`) > 5,`some_id`,NULL) as test FROM `ostalnoe_pofig`
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: (решено)MYSQL сверка результата COUNT на стороне БД

Сообщение vitaly_l » 06.11.2017 23:55:39

нашёл правильное решение для одного SELECT => HAVING !

Код: Выделить всё
HAVING test > 5


( если ВДРУГ кому ещё эта HAVING хрень понадобится )
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru