сумма столбца в таблице не дает правильного результата - PullRequest
0 голосов
/ 26 марта 2011
SELECT
SUM(p.mc_gross) AS totalsales,
SUM(p.tax) AS totlatax, 
(SELECT SUM(totalamount) FROM table1 
    WHERE DATE_FORMAT(paydate, '%d-%m-%Y') = 
    DATE_FORMAT(p.payment_date, '%d-%m-%Y')) AS totalagentsales, 
DATE_FORMAT(p.payment_date, '%d-%m-%Y') AS filter,
(p.mc_gross - p.tax - (SELECT SUM(totalamount) FROM table1)) AS TotalRevenue,
(p.tax + (SELECT SUM(totalamount) FROM table1) ) AS TotalPayment
FROM table2 AS p GROUP BY filter LIMIT 0, 30

Эта сумма запроса не даст правильного результата. Я сделал вычитание для TotalRevenue и сложение для TotalPayment. Этот результат неверен.

Это мой вывод:

totalsales  totlatax   totalagentsales   filter       TotalRevenue   TotalPayment
38.99       3.54       NULL              11-03-2011   33.152         4.54
6           0.09       NULL              14-02-2011   3.612          1.09
2177.46     197.96     0.899             14-03-2011   1977.202       198.96
299.94      27.27      1.399             15-03-2011   270.372        28.27
19.98       1.82       NULL              21-01-2011   15.862         2.82
3           0.27       NULL              22-01-2011   0.432          1.27
14.77       1.82       NULL              28-02-2011   10.652         2.82

1 Ответ

0 голосов
/ 26 марта 2011

Не зная ничего о расположении ваших таблиц, данных в ваших таблицах, ни о том, что вы ожидаете, относительно того, что у вас есть, я просто догадываюсь здесь.Во-первых, вам, вероятно, нужно повторить использование SUM для других случаев, когда вы получаете доступ к mc_gross и tax.Кроме того, я думаю, что использование вами подзапросов портит вас, в частности два экземпляра SELECT SUM(totalamount) FROM table1.Я предполагаю, что вы хотите ограничить строки, используемые при вычислении этих сумм, аналогично тому, как вы делаете с totalagentsales.Вы можете повторно использовать значение totalagentsales, если переместите его в предложение FROM следующим образом:

SELECT SUM(p.mc_gross) AS totalsales, SUM(p.tax) AS totlatax, 
       q.totalagentsales, DATE_FORMAT(p.payment_date, '%d-%m-%Y') AS filter,
       (SUM(p.mc_gross) - SUM(p.tax) - q.totalagentsales) AS TotalRevenue,
       (SUM(p.tax) + q.totalagentsales) AS TotalPayment
FROM table2 AS p,
     (SELECT SUM(totalamount) totalagentsales FROM table1
      WHERE DATE_FORMAT(paydate, '%d-%m-%Y') = DATE_FORMAT(p.payment_date, '%d-%m-%Y')
     ) AS q
GROUP BY filter 
LIMIT 0, 30

Редактировать

SELECT SUM(p.mc_gross) AS totalsales, SUM(p.tax) AS totlatax, 
       q.totalagentsales, DATE_FORMAT(p.payment_date, '%d-%m-%Y') AS filter,
       (SUM(p.mc_gross) - SUM(p.tax) - q.totalagentsales) AS TotalRevenue,
       (SUM(p.tax) + q.totalagentsales) AS TotalPayment
FROM table2 AS p
     LEFT JOIN (SELECT SUM(totalamount) totalagentsales,
                       DATE_FORMAT(paydate, '%d-%m-%Y') AS filter
                FROM table1 GROUP BY filter) AS q
               ON DATE_FORMAT(p.payment_date, '%d-%m-%Y') = q.filter
GROUP BY filter 
LIMIT 0, 30
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...