【问题标题】:Python: Get DISTINCT column values from inside CASE function in pandasqlPython:从 pandasql 中的 CASE 函数内部获取 DISTINCT 列值
【发布时间】:2018-01-23 16:04:03
【问题描述】:

我正在尝试使用pandasql 在 Python 中编写查询。我的代码如下,

import pandas as pd
from pandasql import *

data = pd.read_csv('registerlog.csv')

q = """
SELECT
    a.RegistrationMonth, COUNT(DISTINCT a.UserID) AS UserSize,
    COUNT(
        CASE a.MonthDifference
            WHEN 0.0 THEN DISTINCT a.UserID ELSE NULL
        END
    ) AS MonthZero
FROM
    data) AS a
GROUP BY
    a.RegistrationMonth
"""

print sqldf(q, locals())

但这会产生以下错误,

打印 sqldf(q, locals()) 文件 “C:\Python27\lib\site-packages\pandasql\sqldf.py”,第 156 行,在 sqldf 返回 PandaSQL(db_uri)(query, env) 文件“C:\Python27\lib\site-packages\pandasql\sqldf.py”,第 63 行,在 致电 raise PandaSQLException(ex) PandaSQLException: (sqlite3.OperationalError) near "DISTINCT": 语法错误

但如果我使用WHEN 0.0 THEN a.user_id ELSE NULL,那么它可以工作。 COUNT(DISTINCT a.user_id) 的正常方式也可以正常工作。

但我只想获取CASE 中的DISTINCT 值。有没有办法实现这一点以获取CASE 内的DISTINCT 计数值?

【问题讨论】:

标签: python pandas sqlite pandasql


【解决方案1】:

在 SQL 语法中,DISTINCT 不属于任何值(表达式),而是属于 SELECT 或聚合函数(这里:COUNT)。所以你必须直接写在 SELECT 或左括号之后:

SELECT ..., COUNT(DISTINCT CASE ... END) ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 2018-09-29
    相关资源
    最近更新 更多