-3

谁能帮我理解 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;
4

2 回答 2

1

它返回列的总和,其中count列中的值与每个 post_id的time列中的最新值匹配。time

检查的总数受 cust_id、时间和类型的限制。这些条件的值(显然)作为参数传递。

于 2013-01-10T22:17:11.910 回答
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;

我相信这可以更清楚地说明这个查询在做什么(因为它是一种更标准的形式。)


原始评论

让我猜一下 - 假设计数是观看次数,时间是出现这些观看次数的时间。我的猜测是这样的。但KM不会告诉我们。

无论如何,如果这是它的工作方式,那么这就是查询的作用:

它给出了所有帖子的总视图。 (受传入参数限制)

我可以解释原因,但我会等你为诅咒我而道歉。

于 2013-01-10T22:30:50.417 回答