是否可以结合窗口函数(如OVER(PARTITION BY id)
)对非重复值进行计数?目前我的查询如下所示:
SELECT congestion.date, congestion.week_nb, congestion.id_congestion,
congestion.id_element,
ROW_NUMBER() OVER(
PARTITION BY congestion.id_element
ORDER BY congestion.date),
COUNT(DISTINCT congestion.week_nb) OVER(
PARTITION BY congestion.id_element
) AS week_count
FROM congestion
WHERE congestion.date >= '2014.01.01'
AND congestion.date <= '2014.12.31'
ORDER BY id_element, date
但是,当我尝试执行查询时,我得到以下错误:
"COUNT(DISTINCT": "DISTINCT is not implemented for window functions"
5条答案
按热度按时间trnvg8h31#
不,正如错误消息所述,
DISTINCT
没有使用Windows函数实现。将this link中的信息应用到您的案例中,您可以使用以下内容:根据具体情况,您也可以将子查询直接放入
SELECT
-list中:j13ufse22#
我发现最简单的方法是使用子查询/CTE和条件聚合:
wydwbb8l3#
使分区集更小,直到计数字段上没有重复项为止:
qij5mzcb4#
由于这是从Google弹出的第一个结果,我将添加这个可重复的例子,类似于Gordon的答案:
我们首先创建一个样表:
这将产生:
然后,做类似这样的事情:
收益率
nimxete25#
如果您正在计算非重复数字,则可以使用其他聚合函数来获得相同的效果,如下所示。
第一个