PSQL不计算所有条目

时间:2016-03-15 23:48:43

标签: sql count where psql pgadmin

我正在编写一个计数查询,用于计算几年内参加活动的人数。但是,有一个名为status的列,其中包含有关出勤的额外信息。当该人未出席时列出Apology,因此应将其排除在外。 status有各种条目,包括小组的信件,出勤信息,访客状态以及NULL条目。

问题在于并非所有的出勤都被计算在内。当status NOT LIKE 'Apology'被移除时,它们会被完整计算。

如何计算所有条目?而不是1583年中有限的364个。

我在pgAdmin III v1.18.1中使用psql v9.3.11。

以下是相关代码:

SELECT b.attendances,
    COUNT(b.attendances)
FROM (
    SELECT COUNT(a.event_id) as attendances
    FROM (SELECT DISTINCT event_id AS event_id,
        member_pers_id AS member_pers_id
        FROM event_attendance
        WHERE status NOT LIKE 'Apology') a
    GROUP BY member_pers_id
    ORDER BY attendances) b
GROUP BY attendances
ORDER BY attendances ASC

1 个答案:

答案 0 :(得分:1)

我怀疑NOT LIKE正在过滤其他值,例如NULL。如果是这样,那么明确地测试它。

此外,进行如此多的聚合是没有意义的。一个就足够了:

      SELECT COUNT(a.event_id) as attendances
      FROM (SELECT DISTINCT event_id, member_pers_id
            FROM event_attendance
            WHERE status NOT LIKE 'Apology' OR status IS NULL
           ) a

而且我不确定SELECT DISTINCT是否必要