Запрос!Как я могу получить общее питание и стоимость из трех таблиц для каждого пользователя!Это мой первый вопрос, так что извините за неудобства - PullRequest
0 голосов
/ 04 апреля 2019

введите описание изображения здесь У меня есть три таблицы пользователей, питание, расходы.Я хочу рассчитать еду пользователей, расходы между отображением даты с помощью одного запроса.Я пытался во многих отношениях.Как

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:

1 Ответ

0 голосов
/ 04 апреля 2019

выполнить агрегирование встроенных представлений, при этом встроенное представление возвращает одну строку на user_id, чтобы избежать полукартового произведения (частичное перекрестное произведение)

Примерно так:

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

Обратите внимание, что запросы встроенного представления n и t возвращают одну строку на user_id с общей суммой расходов или общим количеством приемов пищи.Для проверки каждый запрос встроенного представления может быть выполнен отдельно для проверки результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...