1

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

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 行,在 调用中 引发 PandaSQLException(ex) PandaSQLException: (sqlite3.OperationalError) 在“DISTINCT”附近:语法错误

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

但我只想DISTINCT获取CASE. 有没有办法实现这一点来获得DISTINCT里面的计数值CASE

4

1 回答 1

0

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

SELECT ..., COUNT(DISTINCT CASE ... END) ...
于 2018-01-23T17:38:58.760 回答