Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PostgreSQL中1为空时比较2个表 列表项_Postgresql_Null_Left Join_Grouping_Counting - Fatal编程技术网

在PostgreSQL中1为空时比较2个表 列表项

在PostgreSQL中1为空时比较2个表 列表项,postgresql,null,left-join,grouping,counting,Postgresql,Null,Left Join,Grouping,Counting,我是PostgreSQL的新手,很难得到我想要的结果。 为了得到适当的结果,我需要进行多个联接,并且在一个查询中对它们进行分组计数时也会遇到困难 该表的名称如下:pers_person、pers_position和acc_transaction。 我想要完成的是 要查看谁在哪一天缺席,比较个人与acc交易的任何记录,如果有任何记录,其罚款。。。但若记录为空,那个人肯定缺席了 我想按每个人的缺席次数计算,这个人一个月缺席多少次 此外,还应考虑雇用日期,该人员可能在11月或10月被雇用。报告应将该人

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

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

  • 要查看谁在哪一天缺席,比较个人与acc交易的任何记录,如果有任何记录,其罚款。。。但若记录为空,那个人肯定缺席了
  • 我想按每个人的缺席次数计算,这个人一个月缺席多少次

  • 此外,还应考虑雇用日期,该人员可能在11月或10月被雇用。报告应将该人员过滤掉

  • pers_职位表用于提供该人员的职位信息

  • “啊,啊,啊,啊,啊,啊,啊,啊!”

    选择tr.create_time::date AS date,pers.pin,tr.dept_name,tr.name,tr.last_name,pos.name,Count(*)
    从acc_事务作为tr
    以个人身份右键加入个人
    ON tr.pin=pers.pin
    左连接pers_位置作为位置
    在个人位置上\u id=位置id
    其中tr.event_no=0,DATE_PART('month',DATE)=10,DATE_PART('month',pr.hire_DATE::DATE)

    • 右连接
      更改为
      左连接
      ,因为它们的工作原理是相同的,但在脑海中想清楚这两种连接很容易混淆:
    • 暂时删除
      pers\u position
      表,因为它用于添加信息,而不是更改任何返回的结果
    • 有一个未知的别名
      pr
      ,我假设它是针对
      pers
      (?)的,并相应地更改它
    • 这导致了奇怪的地方条件,消除它们
      • “pers.pin与pers.pin不同”(字段从不与自身不同)
      • “和日期部分('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
    
    选择tr.create_time::date AS date,pers.pin,tr.dept_name,tr.name,tr.last_name,Count(*)
    从个人到个人
    在tr.pin=pers.pin上作为tr的左连接acc_事务
    其中tr.event_no=0
    日期部分('month',pers.hire_DATE::DATE)我从

    • 右连接
      更改为
      左连接
      ,因为它们的工作原理是相同的,但在脑海中想清楚这两种连接很容易混淆:
    • 暂时删除
      pers\u position
      表,因为它用于添加信息,而不是更改任何返回的结果
    • 有一个未知的别名
      pr
      ,我假设它是针对
      pers
      (?)的,并相应地更改它
    • 这导致了奇怪的地方条件,消除它们
      • “pers.pin与pers.pin不同”(字段从不与自身不同)
      • “和日期部分('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
    
    选择tr.create_time::date AS date,pers.pin,tr.dept_name,tr.name,tr.last_name,Count(*)
    从个人到个人
    在tr.pin=pers.pin上作为tr的左连接acc_事务
    其中tr.event_no=0
    
    和日期部分('month',pers.hire_日期::DATE)谢谢您的回复。我运行了您提供的查询,发现GROUP BY有错误错误:列“pers.pin”必须出现在GROUP BY子句中或用于聚合函数行2:选择tr.create_time::date AS date,pers.pin,tr.dept_name,…^SQL状态:42803字符:39当我删除GROUP BY并计数时,谢谢您的回复。我运行了您提供的查询,发现GROUP BY有错误错误:列“pers.pin”必须出现在GROUP BY子句中或用于聚合函数行2:选择tr.create_time::date AS date,pers.pin,tr.dept_name,…^SQL状态:42803字符:39当我删除GROUP BY并计数它时