首页 > 解决方案 > 使用 python 中的 SQL 语句在 SQL LITE 中添加一个列到一定数量

问题描述

我在使用这行代码时遇到了问题。基本上,我想做的是在数据库(SQL LITE)中添加一列,并在 Python 中使用 SQL 来添加该列,直到它达到某个值并说明达到该值的人的姓名。

我使用了一大堆不同的命令顺序,例如并切换了下面语句中列出的列的顺序,这没有帮助,所以这是我取得最大进展的一个。

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 语句从我的数据库中的“百分比”列向下移动,并将所有数字相加,直到达到 0.5000 值,并打印出它在达到 0.5000 计数时添加的姓氏. 相反,它会按 AZ 顺序打印出所有大于 0.5000 的男孩名字。我认为这是因为 group by 语句按百分比超过 0.5000 的名称对其进行分组。

标签: sqlitepycharmpython-3.7

解决方案


我认为您可以使用SQLiteSUM支持的窗口化:

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;

推荐阅读