我正在编写一个计数查询,用于计算几年内参加活动的人数。但是,有一个名为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
答案 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
是否必要