Python SQL (ПОДСТРОКА СУММА)

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