在 sqlite 中计算基于 2 列(每 1 列 1 个条件)的 2 个条件的百分比
Calculate a Percentage based off 2 conditions for 2 columns (1 cond per 1 col) in sqlite
鉴于下面的 table 格式
id book_name(TEXT) rating(REAL)
1 The Book 50.0
2 Perks Of 30.2
3 book game 100.0
4 Hobbit 80.0
我想计算 book_name 文本中包含“book”(不区分大小写)且评分高于 50.0 的百分比。该百分比将计算为(满足 2 个条件的行数/总行数)。这种情况下的答案是通过 2/4 = 50.0 计算的(这是百分比形式)
我想要 return 50.0 作为答案
您可以在 SUM() 中使用 CASE 语句来进行条件计数 -
SELECT ROUND((SUM(CASE WHEN book_name LIKE '%book%' AND rating >= 50 THEN 1 END)/COUNT(*)) * 100, 1)
FROM books
更新
我在两个 COUNT 的除法周围添加了另一对括号,以解决@ChrisCharley 在下面的评论中提到的问题。
您可以在条件下使用正则表达式使用 lower then 过滤器
import pandas as pd
data = {"id":[1,2,3,4], "book_name(TEXT)":["The Book","Perks Of","book game","Hobbit"],"rating(REAL)":[50.0,30.2,100.0, 80.0] }
data = pd.DataFrame(data)
data["lower"] = data["book_name(TEXT)"].str.lower()
data1 = data[data.lower.str.contains("book")==True]
data1 = data1[data1["rating(REAL)"]>=50.0]
(len(data1)/len(data))*100
鉴于下面的 table 格式
id book_name(TEXT) rating(REAL)
1 The Book 50.0
2 Perks Of 30.2
3 book game 100.0
4 Hobbit 80.0
我想计算 book_name 文本中包含“book”(不区分大小写)且评分高于 50.0 的百分比。该百分比将计算为(满足 2 个条件的行数/总行数)。这种情况下的答案是通过 2/4 = 50.0 计算的(这是百分比形式)
我想要 return 50.0 作为答案
您可以在 SUM() 中使用 CASE 语句来进行条件计数 -
SELECT ROUND((SUM(CASE WHEN book_name LIKE '%book%' AND rating >= 50 THEN 1 END)/COUNT(*)) * 100, 1)
FROM books
更新
我在两个 COUNT 的除法周围添加了另一对括号,以解决@ChrisCharley 在下面的评论中提到的问题。
您可以在条件下使用正则表达式使用 lower then 过滤器
import pandas as pd
data = {"id":[1,2,3,4], "book_name(TEXT)":["The Book","Perks Of","book game","Hobbit"],"rating(REAL)":[50.0,30.2,100.0, 80.0] }
data = pd.DataFrame(data)
data["lower"] = data["book_name(TEXT)"].str.lower()
data1 = data[data.lower.str.contains("book")==True]
data1 = data1[data1["rating(REAL)"]>=50.0]
(len(data1)/len(data))*100