使用 python 中的 SQL 语句在 SQL LITE 中添加一个列,最多达到一定数量
Add a column in SQL LITE up to a certain number using SQL statements in python
我在处理这行代码时遇到了问题。基本上,我想做的是在数据库中添加一列(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% 的男孩的名字,并按 A-Z 的顺序排列。
我有整列的总和(百分比)使用:
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 语句将其按百分比超过 .5000 的名称进行分组。
我认为您可以使用 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;
我在处理这行代码时遇到了问题。基本上,我想做的是在数据库中添加一列(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% 的男孩的名字,并按 A-Z 的顺序排列。
我有整列的总和(百分比)使用:
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 语句将其按百分比超过 .5000 的名称进行分组。
我认为您可以使用 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;