在PostgreSQL中1为空时比较2个表 列表项
我是PostgreSQL的新手,很难得到我想要的结果。 为了得到适当的结果,我需要进行多个联接,并且在一个查询中对它们进行分组计数时也会遇到困难 该表的名称如下:pers_person、pers_position和acc_transaction。 我想要完成的是在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月被雇用。报告应将该人
选择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并计数它时