我有三个查询结果。
查询1:
SELECT DISTINCT employeeid, work.clientid, ROUND ((CAST (AVG(current_lawn_price) AS numeric) / CAST (AVG((((EXTRACT(HOUR FROM job_finish)*60) + EXTRACT(MIN FROM job_finish))) - ((EXTRACT(HOUR FROM job_start)*60) + EXTRACT(MIN FROM job_start))) AS numeric)) / 1, 2) AS under_over_1
FROM work
JOIN timesheet USING (date_linkid)
JOIN client USING (clientid)
WHERE employeeid = 1 AND workid < 557 AND workid > 188
GROUP BY employeeid, clientid ORDER BY clientid ASC;
employeeid | clientid | under_over_1
------------+----------+--------------
1 | 3 | 0.54
1 | 4 | 0.47
1 | 6 | 0.45
1 | 7 | 0.59
. | . | .
. | . | .
查询2:
SELECT DISTINCT employeeid, work.clientid, ROUND ((CAST (AVG(current_lawn_price) AS numeric) / CAST (AVG((((EXTRACT(HOUR FROM job_finish)*60) + EXTRACT(MIN FROM job_finish))) - ((EXTRACT(HOUR FROM job_start)*60) + EXTRACT(MIN FROM job_start))) AS numeric)) / 1.31666666666667, 2) AS under_over_1
FROM work
JOIN timesheet USING (date_linkid)
JOIN client USING (clientid)
WHERE employeeid = 2
GROUP BY employeeid, clientid ORDER BY clientid ASC;
employeeid | clientid | under_over_1
------------+----------+--------------
2 | 2 | 1.01
2 | 3 | 0.21
2 | 4 | 0.71
2 | 6 | 0.68
. | . | .
. | . | .
查询:3
SELECT DISTINCT employeeid, work.clientid, ROUND ((CAST (AVG(current_lawn_price) AS numeric) / CAST (AVG((((EXTRACT(HOUR FROM job_finish)*60) + EXTRACT(MIN FROM job_finish))) - ((EXTRACT(HOUR FROM job_start)*60) + EXTRACT(MIN FROM job_start))) AS numeric)) / 1.31666666666667, 2) AS under_over_1
FROM work
JOIN timesheet USING (date_linkid)
JOIN client USING (clientid)
WHERE employeeid = 3
GROUP BY employeeid, clientid ORDER BY clientid ASC;
employeeid | clientid | under_over_1
------------+----------+--------------
3 | 4 | 0.70
3 | 6 | 0.54
3 | 7 | 1.03
3 | 11 | 0.74
. | . | .
. | . | .
我想输出一个包含所有三个查询结果的表,((很抱歉,但是我必须在这里写更多的东西,这样我才能提交这篇文章。我希望这足够了;-)):]]
employeeid | clientid | under_over_1 ------------+----------+-------------- 1 | 3 | 0.54 1 | 4 | 0.47 1 | 6 | 0.45 1 | 7 | 0.59 . | . | . . | . | . 2 | 2 | 1.01 2 | 3 | 0.21 2 | 4 | 0.71 2 | 6 | 0.68 . | . | . . | . | . 3 | 4 | 0.70 3 | 6 | 0.54 3 | 7 | 1.03 3 | 11 | 0.74 . | . | . . | . | .
我尝试过
UNION ALL
,例如
SELECT DISTINCT employeeid, work.clientid, ROUND ((CAST (AVG(current_lawn_price) AS numeric) / CAST (AVG((((EXTRACT(HOUR FROM job_finish)*60) + EXTRACT(MIN FROM job_finish))) - ((EXTRACT(HOUR FROM job_start)*60) + EXTRACT(MIN FROM job_start))) AS numeric)) / 1, 2) AS under_over_1 FROM work JOIN timesheet USING (date_linkid) JOIN client USING (clientid) WHERE employeeid = 1 AND workid < 557 AND workid > 188 GROUP BY employeeid, clientid ORDER BY clientid ASC UNION ALL SELECT DISTINCT employeeid, work.clientid, ROUND ((CAST (AVG(current_lawn_price) AS numeric) / CAST (AVG((((EXTRACT(HOUR FROM job_finish)*60) + EXTRACT(MIN FROM job_finish))) - ((EXTRACT(HOUR FROM job_start)*60) + EXTRACT(MIN FROM job_start))) AS numeric)) / 1.31666666666667, 2) AS under_over_1 FROM work JOIN timesheet USING (date_linkid) JOIN client USING (clientid) WHERE employeeid = 3 GROUP BY employeeid, clientid ORDER BY clientid ASC UNION ALL SELECT DISTINCT employeeid, work.clientid, ROUND ((CAST (AVG(current_lawn_price) AS numeric) / CAST (AVG((((EXTRACT(HOUR FROM job_finish)*60) + EXTRACT(MIN FROM job_finish))) - ((EXTRACT(HOUR FROM job_start)*60) + EXTRACT(MIN FROM job_start))) AS numeric)) / 1.31666666666667, 2) AS under_over_1 FROM work JOIN timesheet USING (date_linkid) JOIN client USING (clientid) WHERE employeeid = 2 GROUP BY employeeid, clientid ORDER BY clientid ASC;
但是,出现以下错误:
ERROR: syntax error at or near "UNION" LINE 7: UNION ALL
我不确定为什么这是错误的,或者
UNION ALL
在这里是否正确。有人知道吗?
我有三个查询结果。查询1:SELECT DISTINCT employeeid,work.clientid,ROUND((CAST(AVG(current_lawn_price)AS数值)/ CAST(AVG((((((EXTRACT(HOUR FROM job_finish)* 60)+ EXTRACT(...
导致错误的直接原因是引用the manual:
删除所有ORDER BY
。然后将结果查询用作派生表。要保留您想要的顺序,可以使用CASE
表达式将employeeid
映射到整数并确定顺序: