Как исправить деление на сумму от другой группы по - PullRequest
1 голос
/ 15 мая 2019

любой может мне помочь, почему этот код не работает, если я поставлю "GROUP BY DATE"

примерное значение ДАТЫ - 201810,201811,201812,201901 и т. Д.

если я удалю «GROUP BY DATE», его работа, но, будет СУММАТЬ всю строку Я хочу, чтобы SUM totaluser group по всем провинциям по дате, есть идеи?

SELECT DATE AS dates,
   parProvinces.id AS provinceId, 
   parProvinces.name AS province,   
   sum(totaluser) AS countUser,     
   ( SELECT 
         SUM(totalUser)         
         FROM dsMonthlyDemographies         
         GROUP BY DATE  // <<<<-- this is didn't
   ) AS totalUserPerMonths

FROM dsMonthlyDemographies, parProvinces 
WHERE (provincesId = parProvinces.id) 
GROUP BY provinceId, dates 
ORDER BY dates ASC, provinceId ASC

ошибка сообщения:

Код ошибки: 1242 Подзапрос возвращает более 1 строки

UPDATE

это пример данных из dsMonthlyDemographies

table dsMonthlyDemographies

таблица parProvinces

table parProvinces

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Привет, друг, просто добавь b.provincesId = dsMonthlyDemographies.provincesId, как показано ниже:

SELECT DATE AS dates,
   parProvinces.id AS provinceId, 
   parProvinces.name AS province,   
   sum(totaluser) AS countUser,     
   ( SELECT 
         SUM(b.totalUser)         
         FROM dsMonthlyDemographies  b       
         b.provincesId = dsMonthlyDemographies.provincesId
   ) AS totalUserPerMonths


    FROM dsMonthlyDemographies, parProvinces 
    WHERE (provincesId = parProvinces.id) 
    GROUP BY provinceId, dates 
    ORDER BY dates ASC, provinceId ASC
1 голос
/ 15 мая 2019

Вам нужен скалярный подзапрос

SELECT DATE AS dates,
   parProvinces.id AS provinceId, 
   parProvinces.name AS province,   
   sum(totaluser) AS countUser,     
   ( SELECT 
         SUM(totalUser)         
         FROM dsMonthlyDemographies b where a.date=b.date        
   ) AS totalUserPerMonths

FROM dsMonthlyDemographies a join parProvinces on a.provincesId = parProvinces.id
GROUP BY provinceId, dates 
ORDER BY dates ASC, provinceId ASC

ИЛИ

select * from 
(SELECT DATE AS dates,
   parProvinces.id AS provinceId, 
   parProvinces.name AS province,   
   sum(totaluser) AS countUser     
   FROM dsMonthlyDemographies a join parProvinces on a.provincesId =parProvinces.id
   GROUP BY provinceId, dates 
)A inner join 
( SELECT 
         dates,SUM(totalUser)         
         FROM dsMonthlyDemographies group by dates   
 ) AS B on A.dates=b.dates

ПРИМЕЧАНИЕ. Всегда лучше использовать явное соединение, а не соединение через запятую

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