Я пытаюсь изучить SQL, и пока я медленно учусь, как запрашивать данные, я зацикливаюсь на результатах запроса. Возьмем этот пример
Я хочу, чтобы оператор SQL делал 2 вещи. Предположим, у меня есть 2 таблицы, подобные приведенной ниже (таблица 1 взята из другого примера при переполнении стека)
Таблица 1:
ID game point time
1 x 5 7:00
1 z 4 11:00
2 y 6 9:00
3 x 2 2:00
3 y 5 4:00
3 z 8 6:00
4 k 0 8:00
Таблица 2:
id tv chan
1 cab
2 trop
3 start
4 cab
Первое, что я хочу сделать, это объединить некоторые столбцы из этих таблиц. Я знаю, что могу выбрать эти столбцы и сделать внутреннее соединение по ID
Однако второе, что я хочу сделать, это сбросить все строки с нулевым значением 0, а затем иметь только строки с отличным именем игры с наименьшим значением точки. Поэтому я хочу, чтобы финальный стол выглядел так
id game point tv chan
1 z 4 cab
2 y 5 trop
3 x 2 start
Спасибо
Вы можете попробовать что-то вроде этого:
SELECT t1.ID,
t1.game,
t1.point,
t2.tv_chan
FROM Table1 AS t1
INNER JOIN Table2 AS t2 ON t2.id = t1.id
INNER JOIN (SELECT t11.game, MIN(t11.point) AS min_point
FROM Table1 AS t11
WHERE t11.point != 0
GROUP BY t11.game
) AS t3 ON t3.game = t1.game
AND t3.min_point = t1.point
WHERE t1.point != 0
Вы можете использовать соединение с подзапросом, в котором группа по id и игре получает минимальную точку
select t1.id, t1.game. t1.point, t2 'tv chan'
from (
select id, game, min(point) point
from table1
where point > 0
group by id, game
) t1
inner join table2 t2 on t1.id = t2.id