任何人都可以帮我理解PostgreSQL中的这个SQL查询吗?
SELECT sum(count)
FROM (
SELECT count,
time,
max(time) OVER (PARTITION BY post_id) max_time
FROM totals
WHERE cust_id IN %s
AND time < %s
AND type = %s
) as ss
WHERE time = max_time;
答案 0 :(得分:1)
它返回count
列的总和,其中time
列中的值与每个post_id的time
列中的最新值匹配。
检查的总数受cust_id,时间和类型的限制。这些条件的值(显然)作为参数传递。
答案 1 :(得分:1)
其他评论
为了解释我对使用a_horse_with_no_name的OP的评论,可以按如下方式重写此查询:
SELECT sum(count)
FROM (
SELECT count,
time,
RANK() OVER (ORDER BY time DESC PARTITION BY post_id) time_desc
FROM totals
WHERE cust_id IN %s
AND time < %s
AND type = %s
) as ss
WHERE time_desc = 1;
我相信这使得查询更清楚(因为它是一种更标准的形式。)
原始评论
让我猜一下 - 假设count是视图的数量,time是有这些视图的时间。我的猜测是这样的。但KM不会告诉我们。
无论如何,如果它是如何工作的那么这就是查询的作用:
它提供了所有帖子的总观看次数。 (受传入参数的限制)
我可以解释原因,但我会等你为诅咒我而道歉。