#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()
.