比较PostgreSQL中1为空时的2个表


  1. 列表项

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

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

  1. 要查看谁在哪一天缺席,请将任何记录的个人事务与帐户事务进行比较,如果有任何记录,则罚款。。。但如果记录为空,那么此人肯定缺席了
  2. 我想按个人计算缺席次数,这个人一个月缺席多少次。

  3. 此外,还应考虑雇佣日期,该人可能在11月或10月被雇佣,报告中应筛选出该人。

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

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

*这是针对八位字节的报告,*Pin是身份证号码

我会从开始

  • RIGHT JOIN更改为LEFT JOIN,因为它们以相反的方式工作,但将它们都记在心里会令人困惑:
  • 暂时删除pers_position表,因为它用于添加信息,而不是更改任何返回的结果
  • 有一个未知的别名pr,我认为它是为pers(?)准备的,并相应地更改它
  • 这会导致奇怪的WHERE条件,并将其删除
    • "pers.pin与pers.pin不同"(字段从不与自身不同)
    • "AND DATE_PART('month',DATE)=10"(在十月运行时始终为true,否则始终为false)

给出结果查询:

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个表",而问题的内容对此只字未提

相关内容

  • 没有找到相关文章

最新更新