我的查询是我有两个表,一个名为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
答案 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