powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Минимум больше нуля
30 сообщений из 30, показаны все 2 страниц
Минимум больше нуля
    #38570986
Include.nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть данный запрос:

Код: sql
1.
2.
3.
4.
5.
6.
SELECT if(min(r.i2) < min(g.i2), min(r.i2), min(g.i2)) i2
FROM records_db s
JOIN records_db g on g.base = 124 and g.g2 = s.id
JOIN records_db c on c.base = 125 and c.g1 = g.id
JOIN records_db r on r.base = 126 and r.g1 = c.id
WHERE s.base = 123 and s.id = АЙДИ



Как вернуть минимум который больше нуля?
Соответственно, если все элементы нули, то и минимум будет ноль.
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38571003
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если оба меньше нуля?
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38571015
Include.nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, все i2 >= 0.
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38571084
Include.nv,

почитать про LEAST / GREATEST ?
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38571304
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT 
  if((@a:=ifnull(min(if(r.i2>0,r.i2,NULL)),0))
    <(@b:=ifnull(min(if(g.i2>0,g.i2,NULL)),0))
   ,@a, @b) i2
FROM records_db s
JOIN records_db g on g.base = 124 and g.g2 = s.id
JOIN records_db c on c.base = 125 and c.g1 = g.id
JOIN records_db r on r.base = 126 and r.g1 = c.id
WHERE s.base = 123 and s.id = АЙДИ
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38571319
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слишком замудрёно... LEAST / GREATEST проще.
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38571369
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaСлишком замудрёно... LEAST / GREATEST проще.Гы... начальный вопрос был не о том...

Но - оки: так?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT least(
  ifnull(min(if(r.i2>0,r.i2,NULL)),0)),
  ifnull(min(if(g.i2>0,g.i2,NULL)),0))
  )i2
FROM records_db s
JOIN records_db g on g.base = 124 and g.g2 = s.id
JOIN records_db c on c.base = 125 and c.g1 = g.id
JOIN records_db r on r.base = 126 and r.g1 = c.id
WHERE s.base = 123 and s.id = АЙДИ
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38571648
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
SELECT IF(LEAST(min(r.i2),min(g.i2))=0, GREATEST(min(r.i2),min(g.i2)), LEAST(min(r.i2),min(g.i2)))
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38571788
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Include.nvКак вернуть минимум который больше нуля?
Соответственно, если все элементы нули, то и минимум будет ноль.Akina
Код: sql
1.
SELECT IF(LEAST(min(r.i2),min(g.i2))=0, GREATEST(min(r.i2),min(g.i2)), LEAST(min(r.i2),min(g.i2)))

от же ж...
Код: sql
1.
2.
3.
4.
5.
select min(a), min(b) -- = 0, 0 (вместо 1, 2, как требовалось)
from (
   select 0 a,0 b union all
   select 1 a,3 b union all
   select 3 a,2 b )v;
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38571825
Include.nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina
Код: sql
1.
SELECT IF(LEAST(min(r.i2),min(g.i2))=0, GREATEST(min(r.i2),min(g.i2)), LEAST(min(r.i2),min(g.i2)))


А если r.i2 и g.i2 могут быть NULL?
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38571839
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Include.nvА если r.i2 и g.i2 могут быть NULL?Выше кто-то говорил, что Include.nvвсе i2 >= 0
Но если поля могут содержать NULL, то это ВАМ следует определиться, как их интерпретировать.
А с учётом того, что там фигурирует групповая MIN (которая игнорирует NULL-ы), я думаю, что этот вопрос отпал ещё до того, как был задан.
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38571840
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще 2 функции, которые хотелось бы иметь в MS SQL least/greatest... не знал про них, спасибо :)
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38571863
Include.nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaInclude.nvА если r.i2 и g.i2 могут быть NULL?Выше кто-то говорил, что Include.nvвсе i2 >= 0
Но если поля могут содержать NULL, то это ВАМ следует определиться, как их интерпретировать.
А с учётом того, что там фигурирует групповая MIN (которая игнорирует NULL-ы), я думаю, что этот вопрос отпал ещё до того, как был задан.

Спросил, потому что ваш запрос все же возвращает нули в некоторых случаях.
Хотя, если сделать выборку:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT r.i2
FROM cs_records_db s
JOIN cs_records_db g ON g.base =124
AND g.g2 = s.id
JOIN cs_records_db c ON c.base =125
AND c.g1 = g.id
JOIN cs_records_db r ON r.base =126
AND r.g1 = c.id
WHERE s.base =123
AND s.id =АЙДИ



То там имеются значения больше нуля, при этом встречаются NULL.

Но ваш запрос вернул ноль.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT IF(LEAST(min(r.i2),min(g.i2))=0, GREATEST(min(r.i2),min(g.i2)), LEAST(min(r.i2),min(g.i2)))
FROM cs_records_db s
JOIN cs_records_db g ON g.base =124
AND g.g2 = s.id
JOIN cs_records_db c ON c.base =125
AND c.g1 = g.id
JOIN cs_records_db r ON r.base =126
AND r.g1 = c.id
WHERE s.base =123
AND s.id =АЙДИ
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38571876
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Показывайте данные - набор пар полей в первом запросе (кстати, там почему-то одно поле, а не два) и результат второго запроса на тех же данных.
Заодно дополните второй запрос выводом MIN по каждому из полей и LEAST/GREATEST по их паре.
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38571885
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заодно укажите точную версию MySQL - это важно. LEAST / GREATEST до 5,0,13 и после ведут себя по-разному.
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38571897
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Include.nvAkinaпропущено...ваш запрос все же возвращает нули в некоторых случаях.Потому что min(x) всегда покажет 0, если в данных есть 0. LEAST/GREATEST не может получить другое значение, если в его параметрах только нули.
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38571923
Include.nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если я правильно понял по данным из выборки, то это из-за того, что у меня все g.i2 = 0.

Версия: MySQL 5.1.66-0

Данные в файле cs_records_db_gi2_ri2.csv.
Прилагаю скриншот выполнения запроса:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT IF(LEAST(min(r.i2),min(g.i2))=0, GREATEST(min(r.i2),min(g.i2)), LEAST(min(r.i2),min(g.i2))), MIN(g.i2), MIN(r.i2), GREATEST(min(r.i2),min(g.i2)), LEAST(min(r.i2),min(g.i2))
FROM cs_records_db s
JOIN cs_records_db g ON g.base =124
AND g.g2 = s.id
JOIN cs_records_db c ON c.base =125
AND c.g1 = g.id
JOIN cs_records_db r ON r.base =126
AND r.g1 = c.id
WHERE s.base =123
AND s.id =36727



...
Рейтинг: 0 / 0
Минимум больше нуля
    #38571951
Include.nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007Include.nvпропущено...
ваш запрос все же возвращает нули в некоторых случаях.Потому что min(x) всегда покажет 0, если в данных есть 0. LEAST/GREATEST не может получить другое значение, если в его параметрах только нули.
Собственно да, так и происходит.
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38571979
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну собственно ТЗ соблюдено:
Include.nvесли все элементы нули, то и минимум будет ноль.
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38572027
Include.nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaНу собственно ТЗ соблюдено:
Include.nvесли все элементы нули, то и минимум будет ноль.
Но нужен минимум больше нуля. Можно это как-нибудь сделать?
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38572052
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Include.nvAkinaНу собственно ТЗ соблюдено:
пропущено...

Но нужен минимум больше нуля. Можно это как-нибудь сделать?Не читатель...

Повторю... 15624549
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38572056
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
со скобками только напутал вроде, лишнюю поставил...
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38572067
Include.nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007со скобками только напутал вроде, лишнюю поставил...
Для набора данных, который я выкладывал выше, все равно возвращает ноль. :(
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38572076
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Include.nvНо нужен минимум больше нуля. Можно это как-нибудь сделать?
Тваюмать! ну как можно выбрать "минимум больше нуля" из кучи нулей?
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38572082
Include.nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaInclude.nvНо нужен минимум больше нуля. Можно это как-нибудь сделать?
Тваюмать! ну как можно выбрать "минимум больше нуля" из кучи нулей?
Тваюмать! Вы смотрели данные?
Все g.i2 = 0, но имеются r.i2, которые больше нуля.
Требуется выбрать минимум между g.i2 и r.i2 такой, чтобы он был БОЛЬШЕ НУЛЯ.
Естественно, если все g.i2 = 0 и r.i2 = 0, то минимум будет ноль.
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38572096
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так... я кажись наконец понял... вот нехрен было начальный запрос писАть. Тебе надо из всей твоей совокупности по всем двум полям выбрать одно значение, чтобы больше нуля, и самое меньшее из них. Так? тогда

Код: sql
1.
2.
3.
4.
SELECT MIN(r.i2) FROM ... WHERE ... AND r.i2>0
UNION
SELECT MIN(g.i2) FROM ... WHERE ... AND g.i2>0
ORDER BY 1 ASC LIMIT 1
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38572123
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тогда вот такой звэрЪ :)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT LEAST(IFNULL(NULLIF(a,0),b),(IFNULL(NULLIF(b,0),a))) ID
FROM (
   SELECT MIN(IF(r.i2>0,r.i2,NULL))a,MIN(IF(g.i2>0,g.i2,NULL))b
   FROM records_db s
   JOIN records_db g on g.base = 124 and g.g2 = s.id
   JOIN records_db c on c.base = 125 and c.g1 = g.id
   JOIN records_db r on r.base = 126 and r.g1 = c.id
   WHERE s.base = 123 and s.id = АЙДИ
   )q

Ну, или if(least(a,b)=0,greast(a,b),least(a,b)) , что больше понравится)
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38572124
Include.nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaТак... я кажись наконец понял... вот нехрен было начальный запрос писАть. Тебе надо из всей твоей совокупности по всем двум полям выбрать одно значение, чтобы больше нуля, и самое меньшее из них. Так? тогда

Код: sql
1.
2.
3.
4.
SELECT MIN(r.i2) FROM ... WHERE ... AND r.i2>0
UNION
SELECT MIN(g.i2) FROM ... WHERE ... AND g.i2>0
ORDER BY 1 ASC LIMIT 1


Аллилуйя!

Запрос вида:
Код: sql
1.
2.
3.
SELECT MIN(r.i2) FROM ... WHERE ... AND r.i2>0
UNION
SELECT MIN(g.i2) FROM ... WHERE ... AND g.i2>0


Вернет наименьшие значения больше нуля для r.i2 и g.i2.
В итоге у меня получается:
Код: sql
1.
2.
NULL
599



Только если делать так:
Код: sql
1.
2.
...
ORDER BY 1 ASC LIMIT 1


То выводится NULL, а должно быть 599. Осталось это победить и все.
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38572127
Include.nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007Ну тогда вот такой звэрЪ :)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT LEAST(IFNULL(NULLIF(a,0),b),(IFNULL(NULLIF(b,0),a))) ID
FROM (
   SELECT MIN(IF(r.i2>0,r.i2,NULL))a,MIN(IF(g.i2>0,g.i2,NULL))b
   FROM records_db s
   JOIN records_db g on g.base = 124 and g.g2 = s.id
   JOIN records_db c on c.base = 125 and c.g1 = g.id
   JOIN records_db r on r.base = 126 and r.g1 = c.id
   WHERE s.base = 123 and s.id = АЙДИ
   )q

Ну, или if(least(a,b)=0,greast(a,b),least(a,b)) , что больше понравится)
Благодарю, ваш вариант подошел!
Всем спасибо за помощь!
...
Рейтинг: 0 / 0
Минимум больше нуля
    #38871838
Starshoy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Include.nvТолько если делать так:
Код: sql
1.
2.
...
ORDER BY 1 ASC LIMIT 1


То выводится NULL, а должно быть 599. Осталось это победить и все.

ORDER BY NOT NULL ASC LIMIT 1
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Минимум больше нуля
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]