«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Эффективное получение максимального значения и соответствующие методы данных из крупных таблиц баз данных SQL

Эффективное получение максимального значения и соответствующие методы данных из крупных таблиц баз данных SQL

Опубликовано в 2025-04-21
Просматривать:965

How to Efficiently Retrieve the Maximum Value and Corresponding Data from a Large SQL Database Table?

эффективно поиск максимальных значений и связанных данных в больших таблицах SQL

]

Часто запросы базы данных требуют поиска максимального значения в столбце и получения соответствующих данных из других столбцов в одной строке. Это особенно сложно с очень большими наборами данных. Рассмотрим таблицу, в которой необходимо найти самый высокий номер версии для каждого уникального идентификатора, а также связанный с ним тег:

]

пример таблицы:

ID  |  tag  |  version
----- ----- -----
1 |  A  |  10
2 |  A  |  20
3 |  B  |  99
4 |  C  |  30
5 |  F  |  40

желаемый результат:

ID  |  tag  |  version
----- ----- -----
2  |  A  |  20
3  |  B  |  99
4  |  C  |  30
5  |  F  |  40
select

операторы или простой Group by с max могут быть невероятно медленными. В гораздо более эффективном решении используется row_number () функция окна: ]

select S.Id, S.Tag, S.Version ОТ ( Выберите t.*, Row_number () over (раздел по порядку t.id по t.version desc) как rnk От yourtable t ) с Где s.rnk = 1;
SELECT s.id, s.tag, s.version
FROM (
  SELECT t.*,
         ROW_NUMBER() OVER(PARTITION BY t.id ORDER BY t.version DESC) AS rnk
  FROM YourTable t
) s
WHERE s.rnk = 1;
]

]

]
  1. Inner Query:

    он назначает уникальный ранг ( rnk )) на каждую строку в каждой id в порядке убывания, что означает, что самая высокая версия получает ранг 1. ] ] ]

  2. Внешний запрос:
  3. он фильтрует результаты из внутреннего запроса, выбрав только строки, где

    rnk = 1 . Это эффективно дает нам строку с максимальной версией для каждого id . ] ] ]

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

row_number () обеспечивает чистый и эффективный способ достижения желаемого результата. ]

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3