我的查询是我有两个表,一个名为sec_users
,其中包含以下字段:
pk_user, name, days_available
另一个电话solicitud
,其中包含以下字段:
pk_solicitud, fk_empleado, n_dias
表fk_empleado
的{{1}}是solicitud
表的pk_user
外键
好吧,我有一个小报告,它向我展示了每个用户留下的免费日期,但我也希望向您显示该用户请求的日期和相同的查询
例如,24天休息的user1会创建一个应用程序,并要求4天休息,另外10天。我想让你告诉我除了24-4-10 = 14天的剩余天数之外,你必须告诉我你已经使用过的日子:24-14 = 10天消耗。我有以下代码,但它给了我不想要的数字:
sec_users
这个功能告诉我这个:
SELECT u.pk_user, u.dias_disponibles - sum(s.n_diassolicitados) AS dias_libres, (SELECT SUM(N_DIASSOLICITADOS) as dias_disfrutados FROM solicitud)
FROM sec_users u, solicitud s
WHERE s.fk_empleado = u.pk_user
GROUP BY u.pk_user
你必须告诉我这个:
Usuario dias_libres dias_disfrutados
============== ============== ==============
Usuario 1 10 79
鼻子,因为它没有显示。
答案 0 :(得分:1)
You have not filtered by user, this is how you need it:
SELECT u.pk_user,
u.dias_disponibles - sum(s.n_diassolicitados) AS dias_libres,
(SELECT SUM(N_DIASSOLICITADOS) as dias_disfrutados
FROM solicitud s2
WHERE s2.fk_empleado = u.pk_user)
FROM sec_users u
join solicitud s
ON s.fk_empleado = u.pk_user
GROUP BY u.pk_user
但是,这不是质量代码。最好只包括它:
SELECT u.pk_user,
u.dias_disponibles - sum(s.n_diassolicitados) AS dias_libres,
SUM(N_DIASSOLICITADOS) as dias_disfrutados
FROM sec_users u
join solicitud s
ON s.fk_empleado = u.pk_user
GROUP BY u.pk_user
答案 1 :(得分:1)
我怀疑你想要:
SELECT u.pk_user,
(u.dias_disponibles - COALESCE(dias_disfrutados, 0)) AS dias_libres,
COALESCE(dias_disfrutados, 0)
FROM (SELECT u.*,
(SELECT SUM(N_DIASSOLICITADOS)
FROM solicitud s
WHERE s.fk_empleado = u.pk_user
) as dias_disfrutados
FROM sec_users u
) u;
注意:
FROM
子句中使用逗号。 始终使用正确的JOIN
语法。