SQL-запрос: выберите максимум 2 столбца одной строки

Column1 | Column2
--------+-------- 
1       |    1
3       |    2
1       |    3
2       |    1
2       |    4

Мне нужен максимум column1, а после этого максимум column2: в этом примере -> 3: 2

Если вы хотите получить максимум для столбцов 1 и 2, на выходе должно быть 3 | 4, так должно быть?

DxTx 02.05.2018 17:29
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
1
185
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Используйте следующее :

select column1, column2
  from tab 
 where column1 = ( Select max(column1) from tab );

Демонстрация SQL Fiddle

Мне сложно интерпретировать вашу таблицу, но в SQL есть встроенные функции, которые помогут в ваших запросах.

SELECT MAX(column1), MAX(column2)
FROM table_name
WHERE condition;

Я бы использовал order by:

select column1, column2
from t
order by column1 desc, column2 desc
fetch first 1 row only;

Я вижу, вы используете MS Access, поэтому это сформулировано так:

select top (1) column1, column2
from t
order by column1 desc, column2 desc;

Единственная проблема с этим подходом заключается в том, что он может вернуть несколько строк, если у вас есть дубликаты в данных. Если это проблема, включите уникальный идентификатор в качестве последнего ключа в order by:

order by column1 desc, column2 desc, id;

Или используйте агрегацию:

select max(column1), max(column2)
from (select top (1) column1, column2
      from t
      order by column1 desc, column2 desc
     ) as t;

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

Для ваших образцов данных это будет работать:

SELECT Column1, Column2
FROM yourTable
WHERE Column1 = (SELECT MAX(Column1) FROM yourTable)

На основании вашего комментария

and after that the max of column2

Вы, вероятно, захотите это вместо этого:

SELECT Column1, MAX(Column2) as Column2
FROM yourTable
WHERE Column1 = (SELECT MAX(Column1) FROM yourTable)
GROUP BY Column1

Это обрабатывает случаи, когда имеется несколько строк с MAX(Column1), и возвращает только строку среди строк с MAX(Column2).

Если вам нужна вся строка с максимальным значением column1, попробуйте это ...

SELECT TOP 1 * 
FROM   tablename 
ORDER  BY column1 DESC 

Дата образца

+---------+---------+
| Column1 | Column2 |
+---------+---------+
| 1       |       1 |
| 3       |       2 |
| 1       |       3 |
| 2       |       1 |
| 2       |       4 |
+---------+---------+

Выход

+----------+----------+
| Column1  |  Column2 |
+----------+----------+
| 3        |        2 |
+----------+----------+

если вам нужны максимальные значения как column1, так и column2, попробуйте это ...

SELECT MAX(column1) as column1, 
       MAX(column2) as column2
FROM   tablename 

Дата образца

+---------+---------+
| Column1 | Column2 |
+---------+---------+
| 1       |       1 |
| 3       |       2 |
| 1       |       3 |
| 2       |       1 |
| 2       |       4 |
+---------+---------+

Выход

+----------+----------+
| Column1  |  Column2 |
+----------+----------+
| 3        |        4 |
+----------+----------+

Другие вопросы по теме