2016-09-07 13 views
0

の選択「基は、」私は、このテーブルがあるとします。同じ列の値を持つ行(1以上)

id  | column1 | column2 
--------+---------+---------- 
1  | 3  | 1 
2  | 5  | 1 
3  | 6  | 2 
4  | 5  | 2 
5  | 1  | 3 
6  | 7  | 3 
7  | 7  | 3 
8  | 2  | 3 
9  | 5  | 3 
10  | 7  | 4 

(COLUMN2は便宜上注文され、行は実際のテーブルにこの順番ではありません)

列2の同じ値の行の「グループ」を選択するにはどうすればよいですか?必ずしも1を超える値を返してはいけません。ランダムでも問題ありませんが、別の列でも並べ替えることができます。

私は自分自身を明らかにしておりません場合は、これは私がそれを返すようにしたいものです。

id  | column1 | column2 
--------+---------+---------- 
1  | 3  | 1 
2  | 5  | 1 

または

id  | column1 | column2 
--------+---------+---------- 
3  | 6  | 2 
4  | 5  | 2 

または

id  | column1 | column2 
--------+---------+---------- 
10  | 7  | 4 

か...(など)

だからまずr列2の値1を持つすべての行を削除して削除すると、列2の値2のすべての行が返されます。

簡潔にするためにcolumn2は整数です。特定の値を指定する必要はなく、column2は任意の値を持つことができます。私がこの仕事をするために考えることができる唯一の方法は、2つのクエリです。

最初のSELECT column2 FROM test_table GROUP BY column2は、それぞれのcolumn2値とdoを各column2値に対して得るために最初のものです。

同じ結果を達成するためのより効率的な/短い/単一のクエリ方法がありますか?

答えて

2

私が正しくあなたの質問を理解していた場合は、ここでminでサブクエリを使用して1つのオプションです:

select t.* 
from test_table t join (
    select min(column2) column2 
    from test_table 
    ) t2 on t.column2 = t2.column2 
+0

を持つレコードを検索します残念ながら実際のテーブルでは、column2は数字ではありません。私はおそらくそれを言及すべきであり、別の列(これも数字ではない)で並べ替えることを望んでいたが、その例を単純化したいと思っていて、それが重要ではないと思った。申し訳ありませんが、質問を編集します。何とか注文して分を少し変更することはできますか? – alexk745

+0

Nevermind、私はmin(column2 i)をmin(any-column-i-want)に置き換えることができることに気付きました。あなたの時間をありがとう、私は答えを受け入れます! – alexk745

1
select * from yourtable 
where column2 = (select column2 from yourtable 
       order by column2 limit 1) 

column2の中で最も小さい番号を見つけて、これは素晴らしい作品。この数

関連する問題