Подтвердить что ты не робот

SQL-запрос для выбора отдельной строки с минимальным значением

Я хочу, чтобы оператор SQL получал строку с минимальным значением.

Рассмотрим эту таблицу:

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

Как выбрать идентификаторы с минимальным значением в столбце point, сгруппированные по играм? Например:

id  game   point    
1    z      4
2    y      5
3    x      2   
4b9b3361

Ответ 1

Использование:

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

Ответ 2

Это будет работать

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

Ответ 3

Это еще один способ сделать то же самое, что позволит вам делать интересные вещи, например, выбирать лучшие 5 выигрышных игр и т.д.

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

Теперь вы можете правильно получить фактическую строку, которая была идентифицирована как самая низкая оценка, и вы можете изменить функцию заказа, чтобы использовать несколько критериев, таких как "Покажите мне самую раннюю игру с наименьшим счетом" и т.д.

Ответ 4

Как только это отмечено только с помощью sql, используется ANSI SQL и функция окна:

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;

Ответ 5

ответ Кен Кларка не работал в моем случае. Возможно, это тоже не сработает. Если нет, попробуйте следующее:

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

Ответ 6

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;

Ответ 7

Этот альтернативный подход использует предложение SQL Server OUTER APPLY. Таким образом, это

  1. создает отдельный список игр, и
  2. извлекает и выводит запись с самым низким номером точки для этой игры.

Предложение OUTER APPLY можно представить как LEFT JOIN, но с тем преимуществом, что вы можете использовать значения основного запроса в качестве параметров в подзапросе (здесь: игра).

SELECT colMinPointID
FROM (
  SELECT game
  FROM table
  GROUP BY game
) As rstOuter
OUTER APPLY (
  SELECT TOP 1 id As colMinPointID
  FROM table As rstInner
  WHERE rstInner.game = rstOuter.game
  ORDER BY points
) AS rstMinPoints

Ответ 8

Try:

select id, game, min(point) from t
group by id 

Ответ 9

попробовать:

SELECT id  , game , MIN(point) FROM tablename GROUP BY game ;