mysql - 加入 2 个查询结果

标签 mysql sql

我有这个问题:

SELECT YEAR(`data`) AS ano, SUM(ativo) AS tempo_ativo
FROM rh.processamento
GROUP BY YEAR(`data`);

这个查询的结果是

ano tempo_ativo
2015 108247387
2016 172003845

这个查询:

SELECT YEAR(`data`) AS ano, SUM(tempo) AS tempo_extra
FROM rh.aprovacoes
WHERE tipo = 'BH' OR tipo = 'HE' AND estado=1
GROUP BY YEAR(`data`);

结果是:

ano tempo_extra
0    8768100
2015  -4410782
2016  -7213369

我做了这个查询来连接两个查询的结果:

SELECT YEAR(processamento.`data`) AS ano, SUM(ativo) AS tempo_ativo, SUM(tempo)/3600 AS tempo_extra
FROM rh.processamento
LEFT JOIN rh.aprovacoes ON processamento.`data`=aprovacoes.`data` AND (tipo = 'BH' OR tipo = 'HE') AND estado=1
GROUP BY YEAR(aprovacoes.`data`);

但是结果是错误的。 我需要这样的结果:

ano tempo_ativo tempo_extra
0    NULL       8768100
2015 108247387  -4410782
2016 172003845  -7213369

你们能帮帮我吗?

最佳答案

如果第二个查询总是返回第一个查询的所有记录,那么您可以尝试使用LEFT JOIN:

SELECT t1.ano, tempo_extra, tempo_ativo
FROM (
   SELECT YEAR(`data`) AS ano, SUM(tempo) AS tempo_extra
   FROM rh.aprovacoes
   WHERE tipo = 'BH' OR tipo = 'HE' AND estado=1
   GROUP BY YEAR(`data`)
) AS t1
LEFT JOIN (
   SELECT YEAR(`data`) AS ano, SUM(ativo) AS tempo_ativo
   FROM rh.processamento
   GROUP BY YEAR(`data`) 
) AS t2 ON t1.ano = t2.ano

关于mysql - 加入 2 个查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35938676/

相关文章:

MySQL:显式主机名与带通配符的主机名

java - jdbc 自动提交(false) 不起作用

sql - postgresql - 排除任何带有空值的结果

mysql - 如何根据与特定纬度/经度的距离查询 Amazon Redshift 表中的用户 ID 列表?

java - 当我使用 GROUP BY 组合值时,如何显示 SQL 表中的更改?

php - 加载一千个 Cron 脚本的最佳方法

javascript - 如何从mysql中选择多边形中的标记

javascript - 查询检查在哪里

mysql - 如何统计sql中回答测验的总id

mysql max 函数在 joomla 中不起作用