2016-07-25 2 views
0

Это не оригинальная таблица, я создаю подобную ситуацию, чтобы лучше объяснить проблему. Предположим, у меня есть таблица под названием [student], с 4 столбцами: [имя], [пол], [возраст], [страна].Выделить все столбцы, группы по одному столбцу с другими требованиями

Как сделать «SELECT *» запроса, который возвращает строки, которые удовлетворяют эти требования:

  1. студента должен быть мужчиной
  2. только один студент из каждой страны
  3. , если есть больше чем один студенты из одной страны, выберите самую старую

Я попытался использовать GROUP BY на [стране], но все равно получаю ошибку «Столбец ...» недействителен в списке выбора, потому что он не содержится ни в одном из агрегатная функция или предложения GROUP BY»

+0

любой столбец не в совокупности, должен появиться в предложении GROUP BY. Покажите нам свой существующий код – Squirrel

+0

'SELECT * FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY ORDER BY BY DES DES) RN FROM myTable WHERE gender = 'male') T WHERE RN = 1;'? – ZLK

+0

@ZLK Это работает! Я отвечу на ваш ответ, если вы ответите. Благодаря вам, я только что узнал о ROW_NUMBER и PARTITION сегодня. – ogrimmar

ответ

0

Один из возможных подходов:

SELECT * 
FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY Country ORDER BY Age DESC) RN 
    FROM students 
    WHERE gender = 'male') T 
WHERE RN = 1; 

подзапроса выбирает только студент мужского пола, и присваивает им номер строки на основе их возраст, разделенный по стране.

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