подзапрос, возвращающий одну строку - PullRequest
0 голосов
/ 07 октября 2018

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

Первая таблица: студент

id    Name       roll     
1     vivek      22222    
2     abc        33333    

Вторая таблица: сбор

id    amount       roll 
1     3540         22222
2     28140        22222

Я пытаюсь запустить

SELECT roll_no,sum(amount) as deposit 
FROM stu_profile 
join (select roll,amount,sum(amount) from fee group by roll) as fee on roll=roll_no 
WHERE 1 and roll='62032'

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

roll      deposit
22222     31680

но я получаю это

roll      deposit
22222     3540

1 Ответ

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

Вы можете получить желаемый результат с помощью этого:

SELECT
    roll
  , SUM(amount) summed_amt
FROM fee
WHERE roll = '22222'
GROUP BY roll
;

Но если вам действительно нужны обе таблицы, попробуйте следующее:

SELECT
    roll_no
  , summed_amt
FROM stu_profile p
JOIN (
    SELECT
        roll
      , SUM(amount) summed_amt
    FROM fee
    GROUP BY roll
) AS fee
    ON p.roll_no = fee.roll
WHERE p.roll_no = '22222'

Вам не нужна суммаво внешнем запросе, потому что вы уменьшаете внутренний запрос до одной строки для каждого roll и фильтруете только для одного броска.


кстати, только в MySQL это может бытьдопустимый запрос:

select <b>roll,amount</b>,sum(amount) from fee group by <b>roll</b>

В стандартном SQL нельзя группировать только по одному столбцу roll, а вывести 2 столбца (плюс агрегация).Это связано с тем, что изначально вы получили неправильный результат, потому что эта нестандартная группа по синтаксису, который MySQL (плохо) допускает.

Research only_full_group_by

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