А пробовал кто-нибудь сократить размер выборки?

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Ответить
PAleN
Сообщения: 6
Зарегистрирован: 15 сен 2009, 10:20

Можно ли как-то из выборки, упорядоченной
по полям Цех, Пол, ФИО
оставить по N случайных записей из каждой группы?
Т.е. к примеру по 5 мужчин и женщин из каждого цеха.
Ограничение: новых таблиц создавать нельзя - прав не хватает.
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

мысли:
таблица сотрудников не может быть очень большой, следовательно не вижу смысла заморачиваться на минимизацию трафика.
Отсюда вывод - решаем саму задачу на клиенте.
Изображение
PAleN
Сообщения: 6
Зарегистрирован: 15 сен 2009, 10:20

Беда в том, что список сотрудников - это чисто для примера как общий случай. Конкретно - есть список абонентов довольно крупной сети (область) и периодическая нужда выбирать по несколько душ по каждому району, населенному пункту, улице. На клиенте это реализовано, но можно ли это сделать средствами чисто SQL?
Laba
Сообщения: 35
Зарегистрирован: 24 мар 2009, 17:47

Написать одним запросом можно, но не для всех СУБД.

Делается это так:

подзапрос 1
1. получаешь количество строк в таблице сотрудников

подзапрос 2
2. создаёшь выборку из 5x2=10 строк (либо с помощью новой таблицы, либо какую-нибудь существующую используешь)
3. делаешь выборку с номерами складов (либо из таблицы сотрудников, либо, что лучше, используешь справочник складов)
4. перемножаешь выборку складов с выборкой из 10 строк, для каждой строки разыгрываешь номер строки в таблице сотрудников (верхний предел знаем см п.1)

5 строк будут для мужчин, а 5 для девушек

подзапрос 4
5. получаем пронумерованную выборку сотрудников (каждая строка имеет свой номер, не id!!!)

получаем результат
6. соединяем подзапрос 4 и 2 по номеру склада, номеру строки и полу

Как пронумеровать выборку, разыграть значения и соединить запросы зависит от конкретной СУБД.
PAleN
Сообщения: 6
Зарегистрирован: 15 сен 2009, 10:20

Спасибо, направление мысли понятно
Ответить