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

Беда в том, что список сотрудников - это чисто для примера как общий случай. Конкретно - есть список абонентов довольно крупной сети (область) и периодическая нужда выбирать по несколько душ по каждому району, населенному пункту, улице. На клиенте это реализовано, но можно ли это сделать средствами чисто SQL?
Написать одним запросом можно, но не для всех СУБД.
Делается это так:
подзапрос 1
1. получаешь количество строк в таблице сотрудников
подзапрос 2
2. создаёшь выборку из 5x2=10 строк (либо с помощью новой таблицы, либо какую-нибудь существующую используешь)
3. делаешь выборку с номерами складов (либо из таблицы сотрудников, либо, что лучше, используешь справочник складов)
4. перемножаешь выборку складов с выборкой из 10 строк, для каждой строки разыгрываешь номер строки в таблице сотрудников (верхний предел знаем см п.1)
5 строк будут для мужчин, а 5 для девушек
подзапрос 4
5. получаем пронумерованную выборку сотрудников (каждая строка имеет свой номер, не id!!!)
получаем результат
6. соединяем подзапрос 4 и 2 по номеру склада, номеру строки и полу
Как пронумеровать выборку, разыграть значения и соединить запросы зависит от конкретной СУБД.
Делается это так:
подзапрос 1
1. получаешь количество строк в таблице сотрудников
подзапрос 2
2. создаёшь выборку из 5x2=10 строк (либо с помощью новой таблицы, либо какую-нибудь существующую используешь)
3. делаешь выборку с номерами складов (либо из таблицы сотрудников, либо, что лучше, используешь справочник складов)
4. перемножаешь выборку складов с выборкой из 10 строк, для каждой строки разыгрываешь номер строки в таблице сотрудников (верхний предел знаем см п.1)
5 строк будут для мужчин, а 5 для девушек
подзапрос 4
5. получаем пронумерованную выборку сотрудников (каждая строка имеет свой номер, не id!!!)
получаем результат
6. соединяем подзапрос 4 и 2 по номеру склада, номеру строки и полу
Как пронумеровать выборку, разыграть значения и соединить запросы зависит от конкретной СУБД.
Спасибо, направление мысли понятно