Добавить столбец в SQL LITE до определенного числа, используя операторы SQL в Python - PullRequest
0 голосов
/ 09 июня 2019

У меня проблемы с этой строкой кода.По сути, я хочу добавить столбец в базу данных (SQL LITE) и использовать SQL внутри Python, чтобы добавить этот столбец, пока он не достигнет определенного значения, и указать имя человека, которым он достигает этого значения.

Я использовал целую кучу разных порядков команд, например, и изменил порядок столбцов, перечисленных в приведенном ниже утверждении, что не помогло, так что это тот, в котором я добился наибольшего прогрессас.

import sqlite3
conn = sqlite3.connect("Boys.db")
c = conn.cursor()
# Creating the table
class Table:
 c.execute('''CREATE TABLE IF NOT EXISTS Users (Rank INTEGER, Name INTEGER, TotalB INTEGER, Percentage INTEGER)
''')

c.execute('SELECT Name FROM Users GROUP BY Name HAVING SUM(Percentage) 
 > .5000')
rows = c.fetchall()
print('The boys who had a frequency of over 50% was...')
print(rows)

conn.commit()
# Loading in the csv data
csvfile = open('BoysCSVfromText.csv', 'r')
creader = csv.reader(csvfile)
for t in creader:
   c.execute('INSERT INTO Users VALUES(?,?,?,?)', t)
conn.close()  

В этом утверждении выводятся все имена мальчиков с процентом свыше 50% в порядке от AZ.

У меня есть сумма всего столбца (в процентах), используя:

c.execute('SELECT SUM(Percentage) FROM Users')
rows = c.fetchall()
print('The boys who had a frequency of over 50% was...')
print(rows)

Это не то, что я хочу, так что теперь я застрял.Моя база данных состоит из 1000 строк, поэтому я не могу показать все это на рисунке, но это то, что у меня есть:

Пример моей базы данных Примерстрока кода

Надеюсь, я предоставил все изображения, которые понадобятся.

Что я хочу сделать, так это то, что оператор SQL идет вниз по столбцу «Процент» из моей базы данных и добавляет все числа, пока не достигнет значения .5000, и выводит фамилию, которую он добавил, когдаэто достигло .5000 отсчета.Вместо этого происходит то, что он распечатывает все имена мальчиков, которые выше .5000 в порядке AZ.Я думаю, что это потому, что оператор group by группирует его по именам, которые имеют более. 5000 для своего процента.

1 Ответ

1 голос
/ 09 июня 2019

Я думаю, вы могли бы использовать оконный SUM, который поддерживается SQLite :

WITH cte AS (
  SELECT *, SUM(Percentage) OVER(ORDER BY Rank) AS p
  FROM Users
)
SELECT *
FROM cte
WHERE p > 0.5
ORDER BY p
LIMIT 1;
...