2017-05-29 7 views
1

thisと同様の状況に陥りました。 私はさまざまなタイプのデータを持つ複数のカラムを持っていますが、すべてのカラムを選択したいのですが、グループではグループで1カラムしかありません。OracleグループのみONE列 - 更新

マイ表:ソリューションを読んだ後

+--------+----------+----------+-------+-----------------------+ 
| id  | b_group | col2  | col3 |  col4   | 
+--------+----------+----------+-------+-----------------------+ 
| 1  | 1  | abcd  | 100 | www.google.com  | 
| 2  | 1  | xyz  | 200 | www.yahoo.com   | 
| 3  | 2  | dfs  | 200 | www.stackoverflow.com | 
| 4  | 3  | asda3 | 78 | www.imdb.com   | 
| 5  | 4  | zsdvf4 | 65 | www.youtube.com  | 
| 6  | 5  | sdf4  | 101 | www.ymail.com   | 
| 7  | 5  | ssdfsd | 200 | www.gmail.com   | 
| 8  | 1  | zxcgdf4 | 200 | www.club.com   | 
| 9  | 6  | yujhgj | 202 | www.thunderbird.com | 
+--------+----------+----------+-------+-----------------------+ 

は、私が理解することは、私のクエリは同様であるので、集計関数を使用することで、thereを提供:

select MIN(b_group),id,col2,col3,col4 from myTable where col3='200' group by id,col2,col3,col4; 

しかし、これは私の場合には動作しませんcol3 = 200のすべてのレコードを与えています。

マイ所望の出力:

+--------+----------+----------+-------+-----------------------+ 
| id  | b_group | col2  | col3 |  col4   | 
+--------+----------+----------+-------+-----------------------+ 
| 2  | 1  | xyz  | 200 | www.yahoo.com   | 
| 3  | 2  | dfs  | 200 | www.stackoverflow.com | 
| 6  | 5  | sdf4  | 200 | www.ymail.com   | 
+--------+----------+----------+-------+-----------------------+ 

私が選んされたレコードを気にしない、順序は重要ではありません。 グループのある列を1つだけ選択するだけです。

答えて

2

group by句を適用することにより、あなたは(この場合は、idcol2col3、およびcol4のユニークな組み合わせごとに)その中のすべての列のユニークな組み合わせごとの結果の行を取得します。 *私は上記のクエリを実行したとき、私はエラーを得た

SELECT id, b_group, col2, col3, col4 
FROM (SELECT id, b_group, col2, col3, col4, 
       ROW_NUMBER() OVER (PARTITION BY b_group ORDER BY 1) AS rn 
     FROM mytable     
     WHERE col3 = 200) 
WHERE rn = 1 
+0

おかげで多くのことを、 :代わりに、b_groupあたり数行にrow_numberウィンドウ関数を使用することができ、その後、最初に各グループのちょうど(任意)を選択します* ORA-30485:ORDER BY式がありません。** これで、 'ROW_NUMBER()OVER(PARTITION BY b_group ORDER BY b_group)'を使用しました。 –

+0

@niceguy私は 'row_number' **が' order by'節を必要としていることを忘れています、ありがとう! 'order by b_group'は意味がないことに注意してください。なぜなら、同じパーティション内のすべての行は、とにかく同じ' b_group'を持つからです。間違っているわけではありませんが、将来の読者には少し混乱するかもしれません。そのような場合、私は 'order by 1'のようなものでそれを捨てることを好みます。 – Mureinik