web-dev-qa-db-fra.com

Requête SQL pour sélectionner une ligne distincte avec une valeur minimale

Je veux une instruction SQL pour obtenir la ligne avec une valeur minimale. 

Considérez ce tableau:

id  game   point
1    x      5
1    z      4
2    y      6
3    x      2
3    y      5
3    z      8

Comment sélectionner les identifiants ayant la valeur minimale dans la colonne point, regroupés par partie? Comme ça:

id  game   point    
1    z      4
2    y      6
3    x      2   
36
balaji

Utilisation:

Select tbl.* From TableName tbl
Inner Join
(
  Select Id,MIN(Point) MinPoint From TableName Group By Id
)tbl1
On tbl1.id=tbl.id
Where tbl1.MinPoint=tbl.Point
41
Ken Clark

Ça va marcher

select * from table 
where (id,point) IN (select id,min(point) from table group by id);
12
Aspirant

C’est une autre façon de faire la même chose, ce qui vous permettrait de faire des choses intéressantes comme sélectionner le top 5 des jeux gagnants, etc. 

 SELECT *
 FROM
 (
     SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Point) as RowNum, *
     FROM Table
 ) X 
 WHERE RowNum = 1

Vous pouvez maintenant obtenir correctement la ligne qui a été identifiée comme ayant le score le plus bas et vous pouvez modifier la fonction de classement pour utiliser plusieurs critères, tels que "Montre-moi le jeu le plus ancien ayant le score le plus petit", etc. 

10
Shiroy

Comme ceci est étiqueté avec sql uniquement, voici ce qui suit utilise ANSI SQL et une fonction window :

select id, game, point
from (
  select id, game, point, 
         row_number() over (partition by game order by point) as rn
  from games
) t
where rn = 1;
10

La réponse de Ken Clark n'a pas fonctionné dans mon cas. Cela pourrait ne pas fonctionner dans le vôtre non plus. Sinon, essayez ceci:

SELECT * 
from table T

INNER JOIN
  (
  select id, MIN(point) MinPoint
  from table T
  group by AccountId
  ) NewT on T.id = NewT.id and T.point = NewT.MinPoint

ORDER BY game desc
0
samthebrand
SELECT * from room
INNER JOIN
  (
  select DISTINCT hotelNo, MIN(price) MinPrice
  from room
 Group by hotelNo
  ) NewT   
 on room.hotelNo = NewT.hotelNo and room.price = NewT.MinPrice;
0
Tshultrim Dorji