2017-09-20 9 views
0
id game point 
1 x  5 
2 y  4 
3 z  6 
4 x  2 
5 y  5 
6 z  8 

私はゲームxに最小点を持つレコードを選択したい、ゲームのy、zのゲーム最小値を持つ同じグループ内の行を選択しますか?

+1

はあまりにもここにテキストをフォーマットし、同様に期待された結果を追加します。現在のクエリの試行を表示してください。また、使用しているdbmsにタグを付けます。 – jarlh

答えて

0

使用GROUP BYMIN集約関数。グループと

クエリ

select game, min(point) as minPoint 
from your_table_name 
group by game; 
0

使用集約関数この試してみてください、によって:あなたがしたい場合は集計関数

select game, MIN(point) as Minimum_Points 
from Table_name 
group by game; 
2

に名前を付けるために与えることができます

select game, MIN(point) 
from Table_name 
group by game; 

を全体のレコード、あなたはもう少し仕事をするでしょう:

SELECT * from table_name 
WHERE (game, point) IN (select game, min(point) from table_name 
         GROUP BY game); 

また、CTEまたはウィンドウ関数を使用することもできます。

+0

OPのdbmsが "行とテーブルのコンストラクタ"をサポートしている限り、素晴らしい答えです。 – jarlh

+0

@RadimBača、ええ、それはtable_nameだったはずです。一定。 –

0

私は次のようにあなたもGROUP BYせずに必要なすべての値(すべての属性)を見つけるためにどのように最も簡単な方法があると思います:

SELECT t1.id, t1.point, t1.[group] 
FROM your_table t1 
WHERE t1.point = (
     SELECT min(t2.point) 
     FROM your_table t2 
     WHERE t2.[group] = t1.[group] 
    ) 
+0

このコードスニペットをご利用いただき、ありがとうございます。適切な説明(* meta.stackexchange.com/q/114762)は、*なぜ*これが問題の良い解決策であるかを示すことで長期的な価値を向上させ、将来の読者にとって他の同様の質問。あなたの前提を含め、あなたの答えを[編集]して説明を加えてください。 –

+0

@TobySpeight done、最高 –

0

あなたも、パーティション上で使用することができます。

問合せ:

select id,game,min_point from (
    select id, GAME, POINT,min(POINT) over (PARTITION by GAME) as MIN_POINT 
    from YOUR_TABLE) where point = min_point 

結果:ここ

id game min_point 
1 x  2 
2 y  4 
3 z  6 
0

多くの答えが、私たちはOPが使用しているDBMSかわからないので、私が最も一般的な答えでいいと思う:

select t1.id, t1.game. t1.point 
from tablename t1 
join (select game, min(point) as minpoint 
     from tablename 
     group by game) t2 
    on t1.game = t2.game 
    and t1.point = t2.minpoint 

GROUP BYの派生テーブル(サブクエリ)を使用して、各ゲームの最小点を見つけます。 JOINとなります。オラクルで

0

、これはと行うことができます -

select id,game,point As MinPoint 
from table_name where 
point in (select min(point) from table_name group by game); 

次のようにデータの類似の種類の出力は次のとおりです。 -

選択* sql_pracから。

ID DEPT SAL


 1 A       2000 
    2 B      200001 
    3 C      200100 
    4 D      200050 
    5 A      205000 
    6 B      260000 
    7 C      200007 
    8 D      202000 
    9 R      2006600 

9行はゲームによってsql_prac群から(セレクト分(点)でsql_pracここ 点からMinPoint として

選択ID、ゲーム、ポイントを選択);

ID DEPT     MINPOINT 

 1 A       2000 
    2 B      200001 
    4 D      200050 
    7 C      200007 
    9 R      2006600 
+0

相関サブクエリが必要です。 (そしてもっと良いサンプルデータ...) – jarlh

+0

確かに、これを行う方法はたくさんあります。データはあまりないので、私は私にして最も簡単な方法を与えました。これはうまくいきます。そして、このサンプルデータについても、解析関数などを使用することで答えが複雑すぎると解釈することができます。 –

+0

それは正常に動作しません...あなたは重複ポイントの値を持っていないので、それはそのように見えるかもしれませんが、あなたが間違った結果で終わることができるいくつかを追加する場合。 – jarlh

0

あなたは、単純なクエリの下に実行する必要があります:

select game, min(point) point from [table_name] group by game 
関連する問題