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