sqlite - 使用 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 的名称对其进行分组。
解决方案
我认为您可以使用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;
推荐阅读
- node.js - 使用js中的google firebase cloud函数向ios发送推送通知时出现网络错误
- sql - 从表 oracle 中删除重复记录
- momentjs - 时刻 startOf 一天轮到第二天
- python - 无法在屏幕上运行 .py 脚本
- python-3.x - 当我尝试获取方法时,为什么我得到''staticmethod' object is not callable'?
- java - 如何解决 Files.createDirectories 的 NoSuchFileException
- python - 在 Python 中调用 Fortran 子例程返回“NoneType”
- javascript - Ajax用响应替换html,但在加载css,js后加载内容
- runtime-error - 生成构建时出现错误,“在'@angular/forms'中找不到“导出'ɵba'(导入为'i10')
- xml - 用 Go 解析 XML 文件有一个奇怪的行为