我在这段代码上遇到了麻烦。基本上,我想做的是在数据库(SQL LITE)中添加一列,并在Python内部使用SQL添加该列,直到达到某个值并声明达到该值的人员的姓名。
我已经使用了一堆不同的命令,例如,并切换了以下语句中列出的列的顺序,这没有帮助,所以这是我使用最多的命令。 / p>
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()
该语句按A-Z顺序打印出百分比超过50%的所有男孩的姓名。
我使用以下方法获得整列的总和(百分比):
c.execute('SELECT SUM(Percentage) FROM Users')
rows = c.fetchall()
print('The boys who had a frequency of over 50% was...')
print(rows)
这不是我想要的,所以现在我被卡住了。 我的数据库是1000行,所以我无法在一张照片中包含所有内容,但这是到目前为止的内容:
Example of my database Example of the line of code
希望我已经提供了所有需要的图像。
我想要发生的是,该SQL语句从数据库的“ Percentage”列下移,并添加所有数字,直到达到.5000为止,并打印出达到该值时添加的姓氏.5000计数。相反,发生的是它按A-Z顺序打印了所有.5000以上的男孩名称。我认为这是因为group by语句将其按百分比进行分组的名称进行了分组。
答案 0 :(得分:1)
我认为您可以使用SQLite支持的窗口SUM
:
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;