【问题标题】:Calculate a Percentage based off 2 conditions for 2 columns (1 cond per 1 col) in sqlite根据 sqlite 中 2 列(每 1 列 1 个条件)的 2 个条件计算百分比
【发布时间】:2022-01-20 00:16:57
【问题描述】:

鉴于下面的表格格式

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”(不区分大小写)且评分高于 50.0 的 book_name 的百分比。百分比将计算为(满足 2 个条件的行数 / 总行数)。这种情况下的答案是通过 2/4 = 50.0 计算出来的(这是百分比形式)

我想返回 50.0 作为答案

【问题讨论】:

    标签: python sql sqlite


    【解决方案1】:

    您可以在 SUM() 中使用 CASE 语句来进行条件计数 -

    SELECT ROUND((SUM(CASE WHEN book_name LIKE '%book%' AND rating >= 50 THEN 1 END)/COUNT(*)) * 100, 1)
    FROM books
    

    更新

    我在两个 COUNT 的除法周围添加了另一对括号,以解决@ChrisCharley 在下面的 cmets 中提到的问题。

    【讨论】:

    • 如果我想在 sqlite 中使用这个,if() 的替代方法是什么?我试过了,如果在 sqlite 中不存在
    • 我已修改我的答案以使用 CASE。抱歉,我没有意识到这是针对 sqlite 的。
    • 非常感谢您的帮助。一般来说,我对 sql 很陌生,所以我想知道如何使用 sqlite 库在 Python 中查看该查询的值。
    • 我建议您使用迄今为止尝试过的 Python 代码发布一个新问题。祝你好运!
    • 请注意,我必须更改 SELECT stmt 中的项目顺序。 SELECT ROUND(SUM(CASE WHEN name LIKE '%book%' AND rating >= 50 THEN 1 END)*100/COUNT(*), 1)当我使用你的订单时,我得到的结果是'0'。随着项目的改变,我得到了答案'50'。
    【解决方案2】:

    您可以在条件上使用正则表达式来过滤

    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
    

    【讨论】:

    • 不幸的是,我在 SQL 查询中需要这个。但这将在 python 中工作,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 2022-12-02
    相关资源
    最近更新 更多