Python:从 pandasql 中的 CASE 函数内部获取 DISTINCT 列值

Python: Get DISTINCT column values from inside CASE function in pandasql

我正在尝试使用 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())

但这给出了以下错误,

print sqldf(q, locals()) File "C:\Python27\lib\site-packages\pandasql\sqldf.py", line 156, in sqldf return PandaSQL(db_uri)(query, env) File "C:\Python27\lib\site-packages\pandasql\sqldf.py", line 63, in call raise PandaSQLException(ex) PandaSQLException: (sqlite3.OperationalError) near "DISTINCT": syntax error

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

但我只想获取 CASE 中的 DISTINCT 值。有没有一种方法可以实现此目的以获取 CASE 中的 DISTINCT 计数值?

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

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