Mysql
 sql >> база данни >  >> RDS >> Mysql

комбиниране на mysql query SUM() резултат с помощта на вътрешно присъединяване

Първо създайте сумата, след това се присъединете. Като това:

SELECT i.uid
      ,i.date
      ,i.v_in
      ,COALESCE(o.v_out, 0) AS v_out
      ,(i.v_in - COALESCE(o.v_out, 0)) AS balance
FROM (
    SELECT date
          ,uid
          ,SUM(value_in) AS v_in
    FROM   table1
    GROUP  BY 1,2
    ) i
LEFT JOIN (
    SELECT date
          ,uid
          ,SUM(value_out) AS v_out
    FROM   table2
    GROUP  BY 1,2
    ) o USING (date, uid)

По начина, по който го имахте, всеки value_in ще се комбинира с всеки съвпадащ value_out , като по този начин се умножават числата. Първо трябва да обобщите и след това да се присъедините към едно в сум седната out-sum и всичко е супер. Или е така?

Какво се случва, ако няма value_in или value_out за даден (date, uid) ? Или само value_in Или просто value_out ? Заявката ви ще бъде неуспешна.

Подобрих, като използвах LEFT JOIN вместо [INNER] JOIN , но това, което наистина искате, е FULL OUTER JOIN - една от липсващите функции в MySQL.

Можете или да предоставите списък с дни в отделна таблица и LEFT JOIN и двете таблици към него или можете да заобиколите липсващата функция с два пъти LEFT JOIN и UNION . Вижте тук за пример .

Или можете да умножите своя value_out от -1 СЪЕДИНЯВАЙТЕ двете маси заедно и съставете една сума.

Но тивсе още няма да получи ред за един ден без value_in или value_out , което нарушава описанието ви.

И така,единственото чисто решение е да имате таблица с всички (date, uid) искате в резултата и LEFT JOIN сумите на table1 и table2 към него или UNION ALL трите (отрицателен table2 ) в подизбор и след това обобщете.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Някакъв начин да се присъединят тези две заявки без подзаявка?

  2. Грешка при импортирането на SQL дъмп в MySQL:Неизвестна база данни / Не мога да създам база данни

  3. Защо получавам синтактична грешка, когато използвам CAST в MySQL?

  4. две думи и празни интервали не работят в MYSQL заявка, използвайки LIKE

  5. Как да импортирате и експортирате MySQL база данни