Что это значит, когда SQL «Max» имеет второй (целочисленный) параметр?

#python #sql #sqlite

Вопрос:

У меня есть вопрос о запросе SQLite, с которым я работаю для извлечения данных из файла .db на Python:

 SELECT SUM(MaxSquence) FROM (SELECT MAX(SequenceNum,0) AS MaxSquence FROM attacheddb.Table1 WHERE...
 

(SequenceNum-часто малозначное однозначное целое значение)

Моя главная путаница заключается не в конкретном взаимодействии запроса с моим кодом, а в назначении раздела » MAX(последовательность, 0)». Какова цель «0» после SequenceNumInTrack? Создается ли какой-то список, который можно суммировать с помощью ключевого слова SUM ранее в запросе?

Комментарии:

1. См. Документы по функции SQL max ().

Ответ №1:

В подзапросе MAX используется как скалярная функция:

Функция max() с несколькими аргументами возвращает аргумент с максимальным значением или возвращает значение NULL, если какой-либо аргумент равен НУЛЮ. Функция max() с несколькими аргументами выполняет поиск аргументов слева направо в поисках аргумента, определяющего функцию сортировки, и использует эту функцию сортировки для всех сравнений строк.

В частности, вызов to MAX(SequenceNum, 0) вернет значение, которое больше или равно нулю.

Ответ №2:

SequenceNumInTrack-это часто малозначимое (однозначное) целочисленное значение

Это не имеет смысла, если SequenceNumInTrack никогда не бывает отрицательным.

MAX(X,Y,..) Скалярная функция SQLite возвращает наибольшее значение своих аргументов.

В случае MAX(SequenceNum, 0) , если SequenceNum значения всегда положительные (или 0 ), то MAX(SequenceNum, 0) это равносильно справедливому SequenceNum .

Если, с другой стороны, существуют отрицательные значения, то ваш код использует MAX() , чтобы игнорировать эти отрицательные значения для предстоящих SUM() .