powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Выборка из таблицы с первичным ключем из двух полей
12 сообщений из 12, страница 1 из 1
Выборка из таблицы с первичным ключем из двух полей
    #38642356
Aftor_Magister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача в следующая, есть таблица:

Id1 Id2 Qty
1 1 10
1 2 10
1 3 20
2 1 20
2 2 20
2 3 30
3 1 40
3 2 50

Поля id1, id2 составляют первичный ключ.

Следует написать один запрос (т.е. без предварительных запросов, сохраняющих данные где-нибудь в переменных или временных таблицах, без циклов и проч.) , возвращающий по одной записи для каждого значения id1, встречающегося в исходной таблице, при этом, если в исходной таблице есть несколько строк с таким значением id1, то возвращается строка с минимальным для этого значения id1 значением поля Qty. Если таких строк для данного id1 будет несколько, годится любая из них.

Мне на ум пришло только такое решение:

select t.id1, max (t_.id2) , t.qty from
(select id1, min(qty) qty
from test_table
group by id1) t inner join test_table t_ on (t.id1 = t_.id1 and t.qty = t_.qty)
group by t.id1, t.qty

Является ли данное решение верным? Ну тоесть результат верный, но можно ли сказать, что я не использую предварительных запросов?

Верные результаты для приведенной таблицы?

Id1 Id2 Qty
1 1 10
2 1 20
3 1 40

Id1 Id2 Qty
1 2 10
2 1 20
3 1 40

Id1 Id2 Qty
1 1 10
2 2 20
3 1 40

Id1 Id2 Qty
1 2 10
2 2 20
3 1 40
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642437
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select id1,id2,min(Qty) from t
group by id1

нет ? или я что-то не так понял в вашем вопросе
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642447
Aftor_Magister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SashaMercuryselect id1,id2,min(Qty) from t
group by id1

нет ? или я что-то не так понял в вашем вопросе

Такой запрос работать не будет, ибо группировка только по id1,
если добавить в group by еще и id2, то выборка будет совсем не та, что нужна
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642449
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
SashaMercuryselect id1,id2,min(Qty) from t
group by id1

нет ? или я что-то не так понял в вашем вопросе
"столбец id2 недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY"
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642452
Aftor_Magister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот такой запрос будет работать

select id1, max(id2), min(qty) qty
from test_table
group by id1

Но меня смущает следующее, пусть id1 – это код товара, id2 – код партии товара, Qty – остаток на складе. Запрос должен выбрать по одной партии каждого товара с наименьшим остатком, тогда я, практически явно задаю, что код партии будет максимальным при минимальном остатке, а этого делать не нужно.

Тоесть нужно задать в условии, что остаток должен быть минимальным и все, потом для каждого товара выбрать партию с минимальным остатком
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642498
Aftor_Magister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, все же вариант

select id1, max(id2), min(qty) qty
from test_table
group by id1

Не верный (
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38643716
Pavel Kurakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aftor_Magister,
Что то я не пойму зачем выбирать в результирующий набор id2? В условии нет ничего про него.
Ваш запрос все правильно возвращает, но вы же сами привели несколько вариантов "правильной" выборки и, например oracle, не гарантирует какую из них выдаст при каждом следующем запросе.
Либо условие задачи не такое либо здесь не имеет значения какой первичный ключ и есть ли он вообще.
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38643734
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aftor_Magisterможно ли сказать, что я не использую предварительных запросов?
Можно. Ты используешь вложенные запросы.
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38643744
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aftor_Magister , извольте всё-таки указать СУБД.

Aftor_MagisterТакой запрос работать не будетНапример, в MySQL - прекрасно будет работать.

Ну или строго - можно так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select t1.iq1, min(t1.id2) id2, t1.qty
from t t1,
(
  select id1,min(Qty) from t
  group by id1
) q
where t1.id1=q.id1
  and t1.qty=q.qty
group by t1.iq1, t1.qty
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38644410
locked
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aftor_Magister,
для такого типа запросов лучше использовать NOT EXISTS, тоесть перефразируя твое задание, выбрать строки по id1 для которых НЕСУЩЕСТВУЕТ строк с тем же id1 и qty меньше исходного. Ну и для исключения дубликатов задействовать id2 или COUNT()

Код: sql
1.
2.
SELECT * FROM test_table t1 WHERE NOT EXISTS 
	(SELECT * FROM test_table t2 WHERE t1.id1 = t2.id1 AND (t1.id2 > t2.id2 OR t1.qty > t2.qty))
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38648349
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaНапример, в MySQL - прекрасно будет работать.а в постгре можно вывернуться через distinct on + order by :)
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38648831
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 15.05.2014 16:45, SashaMercury wrote:
> Автор: SashaMercury. select id1,id2,min(Qty) from t
> group by id1
>
> нет ? или я что-то не так понял в вашем вопросе

Фу, Саша, фу...
Как ты мог так лажануться ?


select id1, min(Qty)
from t
group by id1
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Выборка из таблицы с первичным ключем из двух полей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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