Объединить 2 Выберите запросы в одной таблице в MySql - PullRequest
0 голосов
/ 04 марта 2019

У меня есть имя таблицы с именем tbl_events, и в ней есть следующие столбцы

Id, Event_Name, District, Branch_Type, Points

Мне нужен столбец суммы точек, где Branch_Type = 2;и сумма очков, разделенная на 10, где Branch_Type = 2, после этого мне нужно добавить те две значения и группу, которые дают результат по районам и порядок по деск.Я пытался этот запрос, но кажется, что-то не так Может кто-нибудь помочь, пожалуйста?

Select (t1.B_Points + t2.D_Points) as T_Points,District From 
(Select Sum(Points)*.1 as B_Points ,District From tblstudents Where Branch_Type=3 group by District)t1
Left Join(Select Sum(Points) as D_points, District From tblstudents Where Branch_Type=2 group by District)t2 on 
(t1.District=t2.District) Order by Desc

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Вы, похоже, просто хотите условную агрегацию:

select district,
       sum(case when branch_type = 3 then 0.1 * points
                when branch_type = 2 then points
                else 0
           end) as t_points
from tblstudents
group by district;

Если вы хотите упорядочить по убыванию точек, то добавьте:

order by t_points desc

Примечание: Предполагается, что вы хотите, чтобы районыкоторые не имеют ни одного типа ветви.Если это не проблема, переместите логику в предложение where:

select district,
       sum(points * (case when branch_type = 3 then 0.1 else 1.0 end) as t_points
from tblstudents
where branch_type in (2, 3)
group by district
order by t_points desc;
0 голосов
/ 04 марта 2019

Вам нужно добавить псевдоним столбца T_Points в порядке

Select (t1.B_Points + t2.D_Points) as T_Points,District 
From 
(
  Select Sum(Points)*.1 as B_Points ,District From tblstudents 
  Where Branch_Type=3 group by District
)t1
Left Join
(
  Select Sum(Points) as D_points, District From tblstudents 
  Where Branch_Type=2 group by District
)t2 on t1.District=t2.District
 Order by T_Points Desc
...