Intereting Posts
SQLite SELECT для нескольких столбцов с повторяющимися сгруппированными строками Расчет праздников: количество суббот и воскресенья в течение заданного диапазона дат в Oracle Запись строки в базу данных на основе службы с помощью текстового окна INSERT IGNORE увеличивает счетчик автоматического увеличения, даже запись не добавляется? Возможно ли передать имя таблицы в качестве параметра в Oracle? Рабочий процесс для добавления новых столбцов из таблиц Pandas в SQLite SQL-запрос, чтобы найти Nth самую высокую зарплату SQL Query – Копировать значения в одной таблице Измельчение XML из базы данных с использованием SSIS как удалить повторяющиеся значения из таблицы MySQL varchar (255) v tinyblob v tinytext Почему hibernate пытается выполнить неверный запрос? Как скопировать базу данных SQL Server 2008 R2 с одной машины на другую Как присоединиться к трем таблицам Имеет ли PL / SQL эквивалентный StringTokenizer для Java?

SQL возвращает n строк для значения строки

Приветствую людей SQL всех стран.

Простой вопрос, надеюсь, простой ответ.

У меня есть таблица базы данных Oracle с информацией о лицах. Столбцы:

FirstName, LastName, BirthDate, BirthCountry 

Скажем, в этой таблице у меня 1500 человек, родившихся на Арубе (BirthCountry = «Аруба»), 678 Ботсвананов (BirthCountry = «Ботсвана»), 13338 канадцев (BirthCountry = «Canadia»).

Какой запрос мне понадобится, чтобы написать примерную партию из 10 записей из каждой страны? Не имеет значения, какой 10, столько же, сколько и 10.

Этот один запрос будет выводить 30 строк, 10 строк из каждой BirthCountry.

Это позволит выбрать 10 самых молодых людей из каждой страны:

 SELECT * FROM ( SELECT p.*, ROW_NUMBER() OVER (PARTITION BY birthCountry ORDER BY birthDate DESC) rn FROM persons p ) WHERE rn <= 10 

Это будет выбирать десять случайных лиц, разные при каждом запуске запроса:

 select * from ( select row_number() over (partition by BirthCountry order by dbms_random.value) as rn , FirstName , LastName , BirthDate , BirthCountry from YourTable ) where rn <= 10