С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/71: Рейтинг темы: голосов - 71, средняя оценка - 4.92
0 / 0 / 1
Регистрация: 02.03.2010
Сообщений: 46

Выбрать минимальное значение или null

23.11.2011, 17:33. Показов 14811. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый, запросописцы.
Столкунулся с такой задачей: нужно выбрать строку, в которой значение поля отсутствует (null), или минимально. То есть из таких строк:
idvalue
10
11
12
13
2null
25
27
32
33

Должны выбираться:
10
2null
32

Если бы не было null'а, то тут все просто - используем MIN, и все работает. Но, цитирую MSDN: "Значения NULL функцией MIN не учитываются."
Как быть?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.11.2011, 17:33
Ответы с готовыми решениями:

Дана матрица С(НхМ). В каждом столбце выбрать наибольший элемент, затем среди этих чисел выбрать минимальное значение
Собственно сама постановка задачи: Дана матрица С. В каждом столбце выбрать наибольший элемент, затем среди этих чисел выбрать...

Выбрать минимальное значение поля
Привет. Помогите с синтаксисом разобратся оператора MIN. припустим есть табличка с полями: orderid| customerid| amount| date 1| ...

Выбрать минимальное значение больше 0 из массива
Есть ассоциативный массив, который содержит числа в пределе от 0 до 50. Нужно из него выбрать минимальное значение, но такое, которое...

7
 Аватар для Gerrard
13 / 13 / 0
Регистрация: 15.01.2010
Сообщений: 144
23.11.2011, 17:49
попробуте воспользоваться в селекте оператором IS NULL.
Вот несколько статтей из этой темы:
Статья 1
Статья 2
0
0 / 0 / 1
Регистрация: 02.03.2010
Сообщений: 46
23.11.2011, 18:06  [ТС]
Цитата Сообщение от Gerrard Посмотреть сообщение
попробуте воспользоваться в селекте оператором IS NULL.
Естественно пробовал. Но тут такая проблема:
SQL
1
2
3
4
SELECT * FROM TABLE 
WHERE id = 2
AND(VALUE IS NULL 
OR VALUE = (SELECT MIN(VALUE) FROM TABLE WHERE id = 2))
Даст в ответ
2null
25
А мне надо только
2null

Монструозное выражение вида
SQL
1
2
3
4
5
SELECT * FROM TABLE WHERE id = 2
AND 
(VALUE IS NULL OR (
(NULL NOT IN(SELECT VALUE FROM TABLE WHERE id = 2)) AND 
 VALUE = (SELECT MIN(VALUE) FROM TABLE WHERE id = 2)))
Даст правильное значение для id = 2 и вернет пустую строку для 1 и 3
0
 Аватар для Gerrard
13 / 13 / 0
Регистрация: 15.01.2010
Сообщений: 144
23.11.2011, 18:36
попробуйте это "Монструозное выражение" использовать так:

SQL
1
2
3
4
5
SELECT * FROM TABLE 
WHERE id = 2
      AND 
            (VALUE IS NULL OR 
            (NOT NULL IN(SELECT MIN(VALUE) FROM TABLE WHERE id = 2)))
Добавлено через 2 минуты
ну или так

SQL
1
2
3
4
SELECT DISTINCT * FROM TABLE 
WHERE id = 2
AND(VALUE IS NULL 
OR VALUE = (SELECT MIN(VALUE) FROM TABLE WHERE id = 2))
0
0 / 0 / 1
Регистрация: 02.03.2010
Сообщений: 46
23.11.2011, 18:45  [ТС]
Цитата Сообщение от Gerrard Посмотреть сообщение
попробуйте это "Монструозное выражение" использовать так:
Distinct тут не поможет.
0
 Аватар для devart dbforge
134 / 119 / 0
Регистрация: 30.06.2010
Сообщений: 221
23.11.2011, 20:27
Если у Вас в столбце VALUE надятся неотрицательные значения, то пройдет вот такой вариант:

T-SQL
1
2
3
4
5
6
SELECT
  id, CASE WHEN min(Value)<0 THEN NULL ELSE min(Value) END AS MinValue
FROM
  (SELECT id, IsNull(Value,-1) AS Value FROM your_table) tt
GROUP BY
  id
В общем смысл в том, чтобы заменить NULL значением, которое гарантировано отсутствует в исходных данных и будет являться гарантировано минимальным в любой группе.
1
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
23.11.2011, 21:41
SQL
1
2
3
SELECT TOP(1) WITH TIES *
FROM T
ORDER BY RANK()OVER(PARTITION BY id ORDER BY [VALUE]);
В данном случае если есть несколько
равных друг другу минимумов для одного и того же id,
то в результирующий набор попадут они все.
Если надо точно по одному минимуму (безразлично какому),
то RANK() надо заменить на ROW_NUMBER()
1
0 / 0 / 1
Регистрация: 02.03.2010
Сообщений: 46
24.11.2011, 10:43  [ТС]
Цитата Сообщение от devart dbforge Посмотреть сообщение
Если у Вас в столбце VALUE надятся неотрицательные значения, то пройдет вот такой вариант
У меня это вообще char
Огромное спасибо.

jap, спасибо, попробую.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.11.2011, 10:43
Помогаю со студенческими работами здесь

Выбрать максимальное или минимальное из трех заданных чисел
Даны три действительных числа а, b, с. Если b &lt;= 0, то выбрать максимальное из чисел а, b, с, в противном случае - минимальное из а b,...

Найти и вывести минимальное значение среди элементов массива, которые имеют нечетное значение или больше, чем 8
Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от 0 до 100. Опишите на русском языке или на...

Выбрать пару векторов или массивов, которая даст минимальное скалярное произведение
Добрый день, подскажите пожалуйста как создать n векторов или массивов, если изначально не известно сколько их будет? Вот условие...

Скрыть дату или записать значение NULL
Добрый день! При выполнении кода ADOQuery1.FieldByName('Data').Value := 0; в базу записывается значение &quot;1899-12-30...

Надо из таблицы ответов выбрать максимальное и минимальное значение, а затем еще и их номера в массиве
Как сделать чтоб из таблицы ответов Mathcad выбрал максимальное и минимальное значение, а затем еще и их номера в этой таблице? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru