2013-10-14 74 views
-1

我的表找點的總和,分組和顯示每個類

+----+-------+------+---------+--------+------+ 
| ID | CLASS | NAME | SCHOOL | POINTS | YEAR | 
+----+-------+------+---------+--------+------+ 
| 1 |  5 | S1 | School1 |  5 | 2013 | 
| 2 |  6 | S2 | School1 |  0 | 2013 | 
| 3 |  5 | S3 | School2 |  1 | 2014 | 
| 4 |  6 | S4 | School1 |  3 | 2013 | 
| 5 |  6 | S5 | School2 |  1 | 2014 | 
| 6 |  5 | S6 | School1 |  0 | 2013 | 
| 7 |  6 | S7 | School2 |  3 | 2013 | 
| 8 |  6 | S8 | School1 |  5 | 2013 | 
| 9 |  5 | S9 | School1 |  1 | 2014 | 
| 10 |  5 | S10 | School1 |  0 | 2013 | 
| 11 |  6 | S11 | School2 |  5 | 2014 | 
| 12 |  5 | S12 | School1 |  1 | 2013 | 
+----+-------+------+---------+--------+------+ 

在這裏,我想找到一所學校的總點數相對於等級和年度訂貨的最高點。

我的問題,需要顯示,Class 5,6點也在Total點。

我正在使用以下代碼。

SELECT School, SUM(Points) as Total FROM students WHERE Year='2013' 
GROUP BY School ORDER BY Total DESC LIMIT 6 

小提琴:http://www.sqlfiddle.com/#!2/9b000/2

所以我最終輸出的樣子:

+---------+-------+ 
| SCHOOL | TOTAL | 
+---------+-------+ 
| School1 | 14 | 
    Class 5  6 
    Class 6  8 

| School2 |  3 | 
    Class 5  0 
    Class 6  3 
+---------+-------+ 

請幫助。對不起英文不好。

+0

爲什麼你打電話給學校列,並在輸出中顯示課程?這沒有意義 –

+0

5級和6級不是SCHOOL專欄的成員.. –

回答

0

這個查詢應該這樣做:

SELECT * FROM (
    SELECT 1 as seq, School, School AS Class, SUM(Points) as Total 
     FROM students 
    WHERE Year='2013' 
    GROUP BY seq, School 
    UNION 
    SELECT 2 as seq, School, class, SUM(points) as total 
     FROM students 
    WHERE year='2013' 
    GROUP BY seq, school, class 
) AS temp 
ORDER BY School, seq, Total DESC 

http://www.sqlfiddle.com/#!2/9b000/37

注:我相信你會過得更好選擇的原始數據,並有報告工具採取聚集和總結數據的照顧。

0
select 
row_number, 
case when class = '' then School else Class end as School, 
Total 
from 
(
    select 
    @curRow := @curRow + 1 AS row_number, 
    a.* 
    from 
     (
     SELECT 
     School, '' as Class, SUM(Points) as Total 
     FROM students WHERE Year = 2013 
     group by School 
     union all 
     select 
     School, Class, sum(Points) as Total 
     from students where year = 2013 
     group by 
     School, Class 
    ) a 
    JOIN (SELECT @curRow := 0) r 
    order by School, Class, Total desc 
) a 
order by row_number