替代在 COUNT(DISTINCT()) 中使用多个条件或“错误:无法识别类型记录的相等运算符”

问题描述 投票:0回答:1

我们的供应商最近迁移到 AWS 的 Redshift,它似乎不允许在 COUNT(DISTINCT()) 查询中使用多个条件。

我正在尝试统计用户一年内的所有访问量,但用户可能在一天内进行重复访问,我想避免计数。

使用此代码,我希望获得每年访问次数的表格,删除同一天的重复访问。

SELECT DATE_PART_YEAR(visit_date) as "year", COUNT(DISTINCT(userID, visit_date))
FROM visits
GROUP BY DATE_PART_YEAR(visit_date)
ORDER BY year;

预期结果:

2018 12,703
2019 14,058
2020 15,920
2021 25,024
2022 39,739

这段代码适用于以前的数据库,但现在抛出一个我无法解决的错误:

ERROR: could not identify an equality operator for type record [ErrorId: 1-64c01a9a-51cd1ea7119c39603889c9c4]

我已经确认,当查询只有 COUNT(DISTINCT(userID)) 时,查询运行良好,但是一旦我将其更改为 COUNT(DISTINCT(userID, Visit_date)),它就会抛出上述错误。

我无法在线破译该错误,因为它在旧服务器(AWS 的 Athena)上运行良好,我假设它特定于 Redshift(它也需要 DATE_PART_YEAR(),而不仅仅是 YEAR())。

有没有一种方法可以解决在 COUNT(DISTINCT()) 中使用多个条件的问题,以便我可以统计用户访问的所有天数?

sql amazon-redshift distinct
1个回答
0
投票

为此目的创建一个子查询怎么样?

SELECT "year", userID, count(*) as count
from (
    SELECT v.DATE_PART_YEAR(visit_date) as "year", v.userID, v.visit_date
    FROM visits v
    GROUP BY DATE_PART_YEAR(visit_date), userID, visit_date
) t
GROUP BY "year", userID
ORDER BY year, userID;
© www.soinside.com 2019 - 2024. All rights reserved.