为什么COUNT(*)为同一个过滤器返回的数字不同于SELECT?

时间:2016-09-02 17:34:20

标签: sql postgresql

[请忽略......问题解决了!不应该被问到......] 我想在过去24小时内了解一下我的新用户;并且我想通过列出用户来验证计数 - 但是我得到两个不同的结果,应该是同一个查询。

在搜索答案并找不到答案之后,我无法解释为什么这两个不同的SQL查询返回不同的数字,而它们应该是等价的。

它们都是连接到同一Postgres数据库的Ruby脚本。

第一个查询是计数:

cu = con.exec "SELECT count(*) AS user_count
    FROM Users u
    LEFT OUTER JOIN Personal_profiles p ON p.user_id = u.id
    WHERE u.updated_at >= TIMESTAMP 'YESTERDAY 23:00:00' - INTERVAL '1 day'
    AND u.updated_at < TIMESTAMP 'YESTERDAY 23:00:00'
    AND u.approved_for_transfer"

    user_count = cu.getvalue(0,0)
    puts "Count of Users created in past 24 hrs:", user_count

返回138的计数。

下一个查询是类似记录的列表:

ru = con.exec "SELECT u.id,u.email, u.created_at::DATE, p.first_name,p.last_name 
    FROM Users u
    LEFT OUTER JOIN Personal_profiles p ON p.user_id = u.id
    WHERE u.created_at >= TIMESTAMP 'YESTERDAY 23:00:00' - INTERVAL '1 day'
    AND u.created_at < TIMESTAMP 'YESTERDAY 23:00:00'
    AND u.approved_for_transfer
    ORDER BY u.created_at DESC"

    puts "Users created in last 24 hr period (reverse chronological order):"

    puts "user.id  email   created_at   first_name    last_name"
    puts "-------  -----   ----------   ----------    ----------"
    ru.each do |row|
    puts "%s %s %s %s %s" % [ row['id'], row['email'], row['created_at'], row['first_name'], row['last_name'] ]

但是这个查询返回53行,这是51条记录(因为前两行是标题)。

我相信在这两种情况下我都有相同的连接和过滤器,但如果有人能够解释为什么查询返回不同的结果,那将非常感激。

1 个答案:

答案 0 :(得分:6)

第一个查询过滤updated_at,另一个过created_at