使用python中的SQL语句在SQL LITE中添加一列,直到特定数量

时间:2019-06-09 20:27:24

标签: sqlite pycharm python-3.7

我在这段代码上遇到了麻烦。基本上,我想做的是在数据库(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语句将其按百分比进行分组的名称进行了分组。

1 个答案:

答案 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;