簡體   English   中英

通過將一組值的一個列的總和作為MySQL順序表

[英]MySQL order table by taking the sum of one colomn for groups of values

我有一個學生考試數據數據庫,類似於下面顯示的數據庫。 我想分配ranks采取的總和,這些學生Marks所有科目(的Subj )一個學期( Sem ),並據此排序。

因此,如果這是原始數據庫:

    Name | S.NO.| Subj | Sem | Marks | Rank
    ab   |  B1  |  C1  | 1   |  002  | 
    ab   |  B1  |  C2  | 1   |  004  | 
    ab   |  B1  |  C3  | 1   |  005  | 
    ab   |  B1  |  C4  | 2   |  008  |  

    xy   |  C2  |  C1  | 1   |  006  |   
    xy   |  C2  |  C2  | 1   |  004  |  
    xy   |  C2  |  C3  | 2   |  007  | 
    xy   |  C2  |  C4  | 2   |  009  | 
    xy   |  C2  |  C5  | 2   |  003  |  

    sm   |  Z1  |  C1  | 1   |  006  | 
    sm   |  Z1  |  C2  | 2   |  004  |  
    sm   |  Z1  |  C3  | 2   |  008  |

我想將其轉換為:

    Name | S.NO.| Subj | Sem | Marks | Rank
    ab   |  B1  |  C1  | 1   |  002  |   1(coz his total is 11 in sem 1)
    ab   |  B1  |  C2  | 1   |  004  |   1
    ab   |  B1  |  C3  | 1   |  005  |   1

    ab   |  B1  |  C4  | 2   |  008  |   3

    xy   |  C2  |  C1  | 1   |  006  |   2
    xy   |  C2  |  C2  | 1   |  004  |   2

    xy   |  C2  |  C3  | 2   |  007  |   1(coz his total is 19 in Sem 2)
    xy   |  C2  |  C4  | 2   |  009  |   1
    xy   |  C2  |  C5  | 2   |  003  |   1

    sm   |  Z1  |  C1  | 1   |  006  |   3

    sm   |  Z1  |  C2  | 2   |  004  |   2
    sm   |  Z1  |  C3  | 2   |  008  |   2

該數據庫大約有30萬行。

這就是你想要的

select name,sno,subj,sem,mark,rank
from
(
select  e1.*
       , @sm:=(select sum(e2.mark) from exams e2 where e1.name=e2.name and e1.sem=e2.sem) summark
       , case when @sem!=sem then @r:=1 
              when @s  !=@sm then @r:=@r+1 
                             else @r 
         end as rank
       , @s:=@sm
       , @sem:=sem
       from exams e1,(select @r:=0, @s:=0,@sm:=0,@sem:=0) r
order by sem,summark desc
) r2      
order by sno,subj;

我不知道運行時。 可能需要一點點。

關於SQL Fiddle的演示: http ://sqlfiddle.com/#!9/b0290/1

以上解釋一下。 MySQL沒有像其他數據庫(例如Oracle)那樣具有分析功能。 但是上面模擬了它。 @sm是分數之和。 @r是等級變量。 如果分數和改變,則增加。 當學期更改時,它將重置為1。 @sem保存上一行的總和, @s @sem保存上一行的學期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM