#python #sqlite
Вопрос:
У меня есть таблица, которая выглядит так:
[Things]
id date number name
------------------------------------------------------------
1 2000-11-20 11 Joe
2 1999-10-13 12 Lis
3 1999-11-11 13 Jhonson
------------------------------------------------------------
И мне нужно создать эту программу, в которой я использую Python и SQL для вычисления суммы каждого числа в этом списке, используя в качестве фильтра только год.
Проблема в том, что я никогда не занимался python, и мне трудно внедрять SQL на java без каких-либо указаний, поэтому я только начал изучать основы python. (Это курс SQL для начинающих, который я провожу, так что главное не в изучении python, а в чем бы то ни было)
Я придумал это:
year = input("Give the year: ")
arvo = db.execute("SELECT number,SUBSTRING (date, 1, 4) FROM Things").fetchall()
Итак, теперь у меня есть список чисел и лет, так что я мог бы довольно легко подсчитать сумму сейчас, но я не совсем уверен, как вы это делаете на Python. Если кто-нибудь знает, как отфильтровать его дальше в SQL, это тоже было бы намного лучше! Заранее спасибо! Я знаю, что мог бы использовать «если год в арво», чтобы проверить, есть ли правильный год в строке, но по какой-то причине я борюсь с каждой строкой (для x)
Ответ №1:
Вы должны отфильтровать таблицу за год, которую вы получаете в качестве входных данных, и использовать SUM()
агрегатную функцию для получения результата:
vuosi= input("Give the year: ")
sql = """
SELECT SUM(number) AS total
FROM Things
WHERE SUBSTR(date, 1, 4) = ?
"""
arvo = db.execute(sql, (vuosi,)).fetchone()
total_sum = arvo[0]
Комментарии:
1. Спасибо. Я немного поиграл с этим, и мне в голову пришел один вопрос. Зачем вам нужно добавлять запятую на (vuosi,), чтобы это сработало?
2. @HuManatee 2-й аргумент
execute()
— это список значений, которые вы передаете, чтобы заменить ? заполнители. Так как есть только 1 значение, которое нужно передать для ? заполнитель в этом случае необходимо использовать запятую, чтобы создать список (только из 1 значения).3. Супер! Это был очень полезный пост для меня сегодня вечером. Помог мне разобраться в том, как писать чистый python SQL. Помог мне выполнить мои задания. Еще раз спасибо.
Ответ №2:
vuosi= input("Give the year: ")
sql = f"""
SELECT SUM(number) AS sum
FROM Things
WHERE SUBSTRING(date, 1, 4) = {vuosi}
"""
Выполняйте отсюда.
Ввод года заполняется в SQL — запросе.
Ответ №3:
Я предполагаю, что вы используете sqlite. Попробуйте использовать этот SQL-запрос:
SELECT SUM(number) FROM Things
WHERE strftime('%Y', date) = year
Код python был бы:
arvo = db.execute("SELECT SUM(number) FROM Things WHERE YEAR(date) = ?", (int(vuosi),)).fetchone()[0]
Комментарии:
1. Я тоже попробовал это, но при использовании «ГОД»я получил ошибку. Хотя выглядел опрятно.
2. Я обновил свой ответ, надеюсь, теперь он работает в sqlite.