mysql - 询问!我如何获得每个用户三张 table 的总餐费和费用!这是我的第一个问题,很抱歉给您带来不便

标签 mysql sql database

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

my meal table

myexepnse table

My Expected Output is:

最佳答案

进行聚合内联 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 查询 nt 针对每个 user_id 返回单行,其中包含总费用金额或总用餐次数。为了进行测试,可以单独执行每个内联 View 查询,以验证结果。

关于mysql - 询问!我如何获得每个用户三张 table 的总餐费和费用!这是我的第一个问题,很抱歉给您带来不便,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55523025/

相关文章:

SQL Server 查询列包含 id 列表

sql - 识别连接节点堆中的图——这怎么称呼?

database - 专门用于位图索引的硬件?

linux - 如何加快对大量文本文件 (1TB) 的搜索

php - 使用 php 从具有相同表的同一服务器查找 2 个 mysql 数据库中的差异

php - 更新查询以对抗谷歌机器人黑客攻击

sql - 使用数据库/sql 时如何获取返回的行数?

mysql - 根据当前id连接两个表

php - 所有列到行mysql

excel - Laravel 5.7 导入 Excel 文件 : Undefined offset