PostgreSQL SQL查询澄清

时间:2013-01-10 22:13:28

标签: sql postgresql

任何人都可以帮我理解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;

2 个答案:

答案 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不会告诉我们。

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

它提供了所有帖子的总观看次数。 (受传入参数的限制)

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