функция суммы возвращает неправильное значение - PullRequest
0 голосов
/ 06 октября 2018

У меня есть 4 таблицы в MySQL, как это

Первый стол: студент

id    Name       roll      final
1     vivek      22222     65000
2     abc        33333     50000

Второй стол: скидка

id    gst_amount   roll 
1     5000         22222
2     6500         22222
3     15000        22222
4     6000         33333

Третий стол: сбор

id    amount       roll 
1     15000        22222
2     5000         22222
3     5000         33333

Четвертая таблица: pdc

id    amount       roll 
1     9250         22222
2     9250         22222

Я хочу объединить все таблицы и хочу получить сумму из таблиц pdc и fee и сумму gst_amount из discountТаблица и окончательное значение столбца.

Я пробовал этот запрос.

SELECT student.roll, final, SUM(discount.gst_amount) AS total, SUM(fee.amount) AS fee, SUM(pdc.amount) AS pdc  
FROM student 
LEFT JOIN discount on student.roll = discount.roll 
LEFT JOIN fee on fee.roll = student.roll 
LEFT JOIN pdc on pdc.roll = student.roll 
GROUP BY student.roll

Это дает мне этот вывод.

roll      final     total     fee       pdc
22222     65000     106000    120000    110000
33333     50000     6000      5000      NULL

Я хочу этот вывод.

roll      final     total     fee       pdc
22222     65000     26000     20000     18500
33333     50000     6000      5000      NULL

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Ваш исходный запрос вычисляет повторяющиеся значения суммы.
Я думаю, вы можете понять, как добавить столбец count(1) к вашему исходному запросу.
Ниже приведен мой вывод.

mysql> SELECT student.roll, count(1) as count
    -> FROM student
    -> LEFT JOIN discount on student.roll = discount.roll
    -> LEFT JOIN fee on fee.roll = student.roll
    -> LEFT JOIN pdc on pdc.roll = student.roll
    -> GROUP BY student.roll
    -> ;
+-------+-------+
| roll  | count |
+-------+-------+
| 22222 |    12 |
| 33333 |     1 |
+-------+-------+
2 rows in set (0.00 sec)

Исходя из этого, пожалуйста, запустите, как показано ниже sql.
Я думаю, что есть улучшения на этом sql, но я получил ожидаемые результаты на данный момент.
Также 26000 в общей колонкея не прав в выводе, и 26500, я думаю, прав.

SELECT 
    student.roll,
    final,
    SUM(discount.gst_amount) AS total,
    SUM(fee.amount) AS fee,
    SUM(pdc.amount) AS pdc
FROM
    student
LEFT JOIN
    (SELECT 
        roll, SUM(gst_amount) AS gst_amount
    FROM
        discount
    GROUP BY roll) AS discount ON discount.roll = student.roll
LEFT JOIN
    (SELECT 
        roll, SUM(amount) AS amount
    FROM
        fee
    GROUP BY roll) AS fee ON fee.roll = student.roll
LEFT JOIN
    (SELECT 
        roll, SUM(amount) AS amount
    FROM
        pdc
    GROUP BY roll) AS pdc ON pdc.roll = student.roll
GROUP BY student.roll
0 голосов
/ 06 октября 2018

Прежде всего, извините, я не даю вам конкретного ответа, но я не лучший в этом.Вы можете попытаться сделать это с помощью подзапросов.Это получит сумму gst_amount для каждого рулона в таблице скидок:

SELECT roll, SUM(gst_amount) AS gst_amount
FROM discount 
GROUP BY roll

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

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