2009-06-21 5 views
0

私は2つの列、た​​とえば、column1とcolumn2を持つテーブルを持っています。 Column2は一意ではありません。 column2の別個​​の値ごとに、テーブルからランダムな行、つまり1つの行だけが必要ですか?問合せでは、個別の列ごとに1つのランダムな行のみを戻す方法はありますか。

つまり、結果セットには、column2の別個​​の値の数と同じ数の行が必要です。

例:

column1 column2 
x   1 
y   2 
z   1 

が、私は結果が

column1 column2 
x   1 
y   2 

または

column1 column2 
z   1 
y   2 

になりたいだけSQLを使用して、このことは可能ですか?

答えて

1

は、MySQL上のトリックを行う必要があり、このクエリ(MySQLの5上でテスト) :

select a.column1, a.column2 from (select * from foo b order by rand()) a group by a.column2; 
+0

ありがとう。それは素晴らしい! –

1

SELECT MAX(column1), column2 FROM yourtablename GROUP BY column2

+0

私のためには機能しません。私はそれを実現するためにはより複雑ではあるがより良い方法が必要であると信じている。 – Matias

+0

ランダムな行が必要です。私はMAX(column1)、column2は常に特定の行を返すと思います。 –

+0

ええ、時々(x、1)と時々(z、1)を返すべきであることを意味する – jitter

0

あなたの行番号を引き戻すと、そのようにフィルタリングするROW_NUMBER() OVER(ORDER BY column1 asc)ような何かをしようとする場合があります。

あなたが使用してSQLのどんな味言及didntの、私はメモリからこれをリコールしています - しかし、この種のものは、Oracleで働く9

関連する問題