2016-07-25 3 views
0

これは元のテーブルではありません。問題をよりよく説明できるように、同様の状況を作成します。 [名]、[性別]、[年齢]、[国]の4つの列を持つ[student]という表があるとします。すべての列を選択し、1列ごとに他の要件でグループ化します。

この要件を満たした行を返す「SELECT *」クエリを行う方法:

  1. 学生は男性でなければなりませんが
  2. がある場合は、それぞれの国
  3. からわずか一人の学生、複数の

[国]でGROUP BYを使用してみましたが、「列 '...」というエラーが表示されるのは、いずれかの列に含まれていないためです集計関数またはGROUP BY句」

+0

集計に含まれない列は、GROUP BY句に指定する必要があります。既存のコードを表示してください – Squirrel

+0

'SELECT * FROM(SELECT *、ROW_NUMBER)OVER(国別ORDER BY年齢DESC)RN from myTableジェンダー= '男性')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; 

サブクエリが唯一の男子学生を選択し、それらに国によって仕切ら自分の年齢に基づいて行番号を割り当てます。

関連する問題