Mysql 使用带差异的Union列组合2个查询

Mysql 使用带差异的Union列组合2个查询,mysql,Mysql,我有两个问题。我需要把它结合起来才能得到实际的结果。 以下是问题1: SELECT a.city as c1, sum(c.gps_exam1) as c2, sum(c.gps_exam2) as c3, sum(c.avg_exam1) as c4, sum(c.avg_exam2) as c5, count(c.gps_exam1) as c6, count(c.gps_exam2) as c7, count(c.avg_exam2) as c8, count(c.avg_e

我有两个问题。我需要把它结合起来才能得到实际的结果。 以下是问题1:

SELECT a.city as c1, 
sum(c.gps_exam1) as c2, 
sum(c.gps_exam2) as c3, 
sum(c.avg_exam1) as c4, 
sum(c.avg_exam2) as c5,
count(c.gps_exam1) as c6, 
count(c.gps_exam2) as c7, 
count(c.avg_exam2) as c8, 
count(c.avg_exam2) as c9,
from report_sekolah a 
join report_stu b 
on a.uid=b.uid 
join report_exam c 
on b.uid=c.uid 
group by a.city
以下是问题2:

SELECT sum(b.stu_bil) as c10 
from   report_sekolah a 
join   report_stu b 
  on   a.uid=b.uid 
group by a.city
我需要把它结合起来才能得到实际的结果。我所做的就是利用工会。以下是查询:

SELECT a.city as c1, 
       sum(c.gps_exam1) as c2, 
       sum(c.gps_exam2) as c3, 
       sum(c.avg_exam1) as c4, 
       sum(c.avg_exam2) as c5, 
       count(c.gps_exam1) as c6, 
       count(c.gps_exam2) as c7, 
       count(c.avg_exam2) as c8, 
       count(c.avg_exam2) as c9, 
       null as c10 
from   report_sekolah a 
join   report_stu b 
  on   a.uid=b.uid 
join   report_exam c 
  on   b.uid=c.uid 
group by a.city 
UNION ALL 
SELECT null as c1, 
       null as c2,  
       null as c3, 
       null as c4, 
       null as c5,  
       null as c6, 
       null as c7, 
       null as c8, 
       null as c9, 
       sum(b.stu_bil) as c10 
from   report_sekolah a 
join   report_stu b 
  on   a.uid=b.uid 
group by a.city
但它给出了错误的行结果。然后我尝试使用下面的查询,但对所有学生的结果都是错误的

SELECT a.city as c1, 
sum(c.gps_exam1) as c2, 
sum(c.gps_exam2) as c3, 
sum(c.avg_exam1) as c4, 
sum(c.avg_exam2) as c5,
count(c.gps_exam1) as c6, 
count(c.gps_exam2) as c7, 
count(c.avg_exam2) as c8, 
count(c.avg_exam2) as c9, 
sum(b.stu_bil) as c10
from report_sekolah a 
join report_stu b 
on a.uid=b.uid 
join report_exam c 
on b.uid=c.uid
group by a.city

尝试下面的查询,这对您很有帮助

我必须更改一个字段(c10)值来设置子查询

SELECT a.city as c1, 
sum(c.gps_exam1) as c2, 
sum(c.gps_exam2) as c3, 
sum(c.avg_exam1) as c4, 
sum(c.avg_exam2) as c5,
count(c.gps_exam1) as c6, 
count(c.gps_exam2) as c7, 
count(c.avg_exam2) as c8, 
count(c.avg_exam2) as c9, 
(SELECT sum(stu_bil) From report_stu Where a.uid=uid) as c10
from report_sekolah a 
join report_stu b 
on a.uid=b.uid 
join report_exam c 
on b.uid=c.uid
group by a.city

谢谢你回答我的问题 我已经得到了答案。以下是正确的查询:

SELECT y.c1, y.c2, y.c3, y.c4, y.c5, y.c6, y.c7, y.c8, y.c9 , z.result
FROM
(
SELECT a.city as c1, 
sum(c.gps_exam1) as c2, 
sum(c.gps_exam2) as c3, 
sum(c.avg_exam1) as c4, 
sum(c.avg_exam2) as c5,
count(c.gps_exam1) as c6, 
count(c.gps_exam2) as c7, 
count(c.avg_exam2) as c8, 
count(c.avg_exam2) as c9,
    a.uid
from report_sekolah a 
join report_stu b 
on a.uid=b.uid 
join report_exam c 
on b.uid=c.uid GROUP BY a.city
) y
INNER JOIN
(
 SELECT sum(b.stu_bil) as result,
    b.uid
    from report_sekolah a join report_stu b on a.uid=b.uid group by a.city
) z
ON y.uid = z.uid

第一行是正确的。下一排错了。谢谢你的回答