enter image description here我有三张 table 的用户,膳食,费用。我想通过单个查询计算用户的膳食、日期显示之间的费用。 我尝试过很多方法。喜欢
SELECT u.name as BorderName , SUM(e.expenseAmount) as expense
FROM users u
INNER JOIN expenses e on e.user_id=u.id
WHERE e.expenseDate BETWEEN '2019.04-01' AND '2019.04.30'
GROUP BY e.user_id
最佳答案
进行聚合内联 View ,内联 View 为每个 user_id 返回一行,以避免半笛卡尔积(部 fork 积)
类似这样的事情:
SELECT u.name
, IFNULL(t.tot_expenseamount,0) AS tot_expense_amount
, IFNULL(n.tot_noofmeal,0) AS tot_no_of_meal
FROM users u
LEFT
JOIN ( SELECT e.user_id
, SUM(e.expenseamount) AS tot_expenseamount
FROM expense e
WHERE e.expensedate >= '2019-04-01' + INTERVAL 0 MONTH
AND e.expensedate < '2019-04-01' + INTERVAL 1 MONTH
GROUP
BY e.user_id
) t
ON t.user_id = u.id
LEFT
JOIN ( SELECT m.user_id
, SUM(m.noofmeal) AS tot_noofmeal
FROM meal m
WHERE m.mealdate >= '2019-04-01' + INTERVAL 0 MONTH
AND m.mealdate < '2019-04-01' + INTERVAL 1 MONTH
GROUP
BY m.user_id
) n
ON n.user_id = u.id
ORDER
BY u.name
请注意,内联 View 查询 n
和 t
针对每个 user_id 返回单行,其中包含总费用金额或总用餐次数。为了进行测试,可以单独执行每个内联 View 查询,以验证结果。
关于mysql - 询问!我如何获得每个用户三张 table 的总餐费和费用!这是我的第一个问题,很抱歉给您带来不便,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55523025/