查询SQL以减去两个字段

时间:2018-02-27 10:27:57

标签: sql

我的查询是我有两个表,一个名为sec_users,其中包含以下字段:

pk_user, name, dias_disponibles

另一个电话solicitud,其中包含以下字段:

pk_solicitud, fk_empleado, n_diassolicitados

fk_empleado的{​​{1}}是solicitud表的pk_user的外键

嗯,我的问题是我想创建一个小报告,在那里我留下每个用户留下的免费日子,他享受的日子,他所受的伤亡。

例如,24天休息的user1会创建一个应用程序,并要求关闭4天,其他10天,因为查询必须说明user1有10天免费。我尝试过这段代码,但它没有很好用,有什么帮助吗?

sec_users

如果例如user1创建了两个请求

,我会得到此语句的结果
SELECT u.pk_user, u.dias_disponibles - s.n_diassolicitados AS dias_libres 
FROM   sec_users u
LEFT JOIN solicitud s on s.fk_empleado = u.pk_user

结果应该是这样的

Usuario             Free days  Baja Permisos
==============    ============  ==== ========
Usuario1               20        1        0
Usuario1               10        1        0

3 个答案:

答案 0 :(得分:1)

您想从n_diassolicitados中减去dias_disponibles总和。所以不要加入表solicitud,而是加入聚合查询:

SELECT 
  u.pk_user, 
  u.dias_disponibles - COALESCE(s.dias_solicitados, 0) AS dias_libres 
FROM sec_users u
LEFT JOIN 
(
  SELECT fk_empleado, SUM(n_diassolicitados) AS dias_solicitados
  FROM solicitud 
  GROUP BY fk_empleado
) s on s.fk_empleado = u.pk_user;

答案 1 :(得分:0)

使用SUM聚合函数:

SELECT u.pk_user, sum(u.dias_disponibles) - sum(s.n_diassolicitados) AS dias_libres 
FROM   sec_users u
LEFT JOIN solicitud s 
on s.fk_empleado = u.pk_user
GROUP BY u.pk_user

...并始终遵循评论中的提示1!

答案 2 :(得分:0)

user1创建了另外2天病假的请求,这2天的病假不计入请求的天数。如何使用以下代码显示请求的两天:

SELECT u.pk_user, u.dias_disponibles - sum(s.n_diassolicitados) AS dias_libres 
FROM   sec_users u
LEFT JOIN solicitud s 
on s.fk_empleado = u.pk_user
GROUP BY u.pk_user