【问题标题】:PSQL not counting all entriesPSQL 不计算所有条目
【发布时间】:2016-03-15 23:48:43
【问题描述】:

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

【问题讨论】:

  • 你有什么问题?
  • 如何让它计算所有条目。我可以添加什么来使上面的内容更清楚?
  • 不需要通配符。 “道歉”是准确的文字。不全选更是个问题。
  • 好的,那也行不通。不过还是谢谢。

标签: sql count where psql pgadmin


【解决方案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 是否有必要

【讨论】:

  • 太棒了,谢谢。奇怪的逻辑异常NULL 应该算不上什么,但过程必须停在那里。
  • DISTINCT 是必要的,因为如果他们邀请了多个客人,每个活动有多个参加者。没有上下文的好皮卡。
猜你喜欢
  • 2018-04-27
  • 1970-01-01
  • 2023-01-26
  • 2020-12-07
  • 1970-01-01
  • 2012-11-16
  • 1970-01-01
  • 1970-01-01
  • 2018-01-07
相关资源
最近更新 更多