【问题标题】:Compare 2 Tables When 1 Is Null in PostgreSQL在 PostgreSQL 中当 1 为空时比较 2 个表
【发布时间】:2019-12-01 11:43:17
【问题描述】:
  1. 列表项

我是 PostgreSQL 的新手,我很难得到我想要的结果。 为了获得适当的结果,我需要进行多个联接,并且在计算将它们分组到一个查询中时也有困难。

表名如下:pers_person、pers_position 和 acc_transaction。 我想要完成的是;

  1. 比较 pers_person 和 acc_transaction 的任何记录,查看谁在哪个日期缺席,如果有任何记录则很好...但如果记录为空,则此人肯定缺席。
  2. 我想统计 pers_person 的缺勤情况,这个人一个月缺勤的次数。

  3. 还应考虑 personhired_date,此人可能在 11 月 10 月被聘用,报告此人应被过滤掉。

  4. pers_postition 表用于给出该人的位置信息。

'''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''

SELECT tr.create_time::date AS Date, pers.pin, tr.dept_name, tr.name, tr.last_name, pos.name, Count(*)
FROM acc_transaction AS tr
RIGHT JOIN pers_person as pers
ON tr.pin = pers.pin
LEFT JOIN pers_position as pos
ON pers.position_id=pos.id
WHERE tr.event_no = 0 AND DATE_PART('month', DATE)=10 AND DATE_PART('month', pr.hire_date::date)<=10 AND pr.pin IS DISTINCT FROM tr.pin
GROUP BY DATE
ORDER BY DATE

'''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''

*这是 10 月的报告, *Pin 是身份证号

【问题讨论】:

    标签: postgresql null left-join grouping counting


    【解决方案1】:

    我会从

    开始
    • RIGHT JOIN 更改为 LEFT JOIN,因为它们的反向工作方式相同,但同时考虑它们会令人困惑:
    • 暂时删除 pers_position 表,因为它用于添加信息而不是更改任何返回的结果
    • 有一个未知别名 pr,我认为它是用于 pers (?),相应地更改它
    • 这会导致奇怪的 WHERE 条件,删除它们
      • “pers.pin IS DISTINCT FROM pers.pin”(字段永远不会与自身不同)
      • "AND DATE_PART('month', DATE)=10 "(在 10 月运行时始终为真,否则始终为假)

    给出结果查询:

    SELECT tr.create_time::date AS Date, pers.pin, tr.dept_name, tr.name, tr.last_name, Count(*)
    FROM pers_person as pers
    LEFT JOIN acc_transaction AS tr ON tr.pin = pers.pin
    WHERE tr.event_no = 0 
        AND DATE_PART('month', pers.hire_date::date)<=10 
    GROUP BY DATE
    ORDER BY DATE
    

    最后,我不知道这是否回答了这个问题,因为标题说“当 PostgreSQL 中 1 为空时比较 2 个表”,而问题的内容对此只字未提。

    【讨论】:

    • 感谢您的回复。我运行您提供的查询,发现 GROUP BY ''''''''''''''''' 错误:列“pers.pin”必须出现在 GROUP BY 子句中或在聚合中使用功能第 2 行:SELECT tr.create_time::date AS Date, pers.pin, tr.dept_name,... ^ SQL 状态:42803 字符:39 '''''' 当我删除 GROUP BY 和 COUNT 它工作跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多