2012-10-28 4 views
0

Можно создать дубликат:
Oracle SQL - How to Retrieve highest 5 values of a columnкак получить первую самку каждого инструмента, базы данных оракула

Я пишу оракул запрос, но застрял в следующей задаче

таблица например:

**Tool**  **Name**  **Gender** 
Facebook Alice  F 
Facebook Alex   M 
Facebook Loong  M 
Facebook Jimmy  M 
Twitter James  M 
Twitter Jessica  F 
Twitter Sam   M 
Twitter Kathrine  F 
Google  Rosa   F 
Google  Lily   F 
Google  Bob   M 

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

Facebook Alice 
Twitter Jessica 
Google  Rosa 

Я пытаюсь получить это с помощью запроса не функции или процедуры Спасибо за помощь

+0

Откуда вы знаете, что Катрин не первая женщина для Твиттера? –

+0

Ваше определение «первое» неоднозначно. «Лилия» явно предшествует «Розе» в алфавитном порядке, поэтому, чтобы «Роза» опередила «Лили», требуется другой критерий упорядочения. Вы не указали никаких дополнительных столбцов, поэтому невозможно достичь предложенного вами набора результатов детерминированным способом. Измените свой вопрос, чтобы уточнить свое требование: либо укажите дополнительный столбец (ы) сортировки, либо укажите, что вы просто хотите, чтобы случайная строка была «первой». – APC

ответ

4
select * 
from (
     select row_number() over (partition by tool order by name) as rn 
     ,  Name 
     ,  Tool 
     from YourTable 
     where Gender = 'F' 
     ) SubQueryAlias 
where rn = 1 -- Only first per tool 

Example at SQL Fiddle.

+0

Здравствуйте, пожалуйста, прочитайте мой ответ на этот вопрос. – Roger

1

Это еще одна альтернатива.

select min(name), tool 
from yourTable 
where gender = 'F' 
group by tool 

Я хотел бы иметь немного обсуждения, на котором лучше или который делает то, что, для меня его первый раз, когда я вижу row_number(). Заметьте, что этот человек возвращает женщину в алфавитном порядке, ваш делает то же самое, сортируя в окне, в чем разница?

+0

+1 хороший ответ - это работает, пока вам не нужно выбирать другие столбцы, кроме имени. Например, если вам нужно вернуть имя и фамилию, 'min' может выбрать имя одного человека и фамилию другого. – Andomar

 Смежные вопросы

  • Нет связанных вопросов^_^