2011-08-17 39 views
0

我需要一些MySQL SELECT語句的幫助。不幸的是,這種說法無法正常工作。它似乎根據學校名稱的字母順序排列,而不是reading_percent_proficient_and_advanced。我應該如何解決它?MySQL加入問題

SET @rank=0; 
SELECT @rank:[email protected]+1 as rank, 
     sy.formatted_school_name, 
     FLOOR(d.reading_percent_proficient + d.reading_percent_advanced) AS reading_percent_proficient_and_advanced 
FROM d_test_scores AS d, 
     sy_2010_2011_school_type AS sy 
WHERE sy.school_id = d.school_id 
     AND sy.school_group = 'public school' 
     AND sy.school_type ='elementary' 
ORDER BY reading_percent_proficient_and_advanced DESC 

如果我拿出的加入,那麼這種說法給了我正確的排名(但我沒有那麼學校名稱):

SET @rank=0; 
SELECT @rank:[email protected]+1 as rank, 
     d.school_id, 
     FLOOR(d.reading_percent_proficient + d.reading_percent_advanced) AS reading_percent_proficient_and_advanced 
FROM d_test_scores AS d 
ORDER BY reading_percent_proficient_and_advanced DESC; 

什麼是我加入的問題?

+0

寫入的查詢應該可以工作。你能給出一些樣本數據和每個查詢的結果嗎? –

回答

1

猜測)我相信排序是在執行ORDER BY排序之前計算的。在原始查詢中,只是在ORDER BY之前以您想要的順序返回結果,因此排名正確,但在高級查詢中,結果最初會以不同的順序返回。

嘗試將排名添加到已經訂購設置(子查詢)的學校名稱和能力評級。

+0

我認爲你是對的,薩姆。我試過這個查詢:「SET \ @ rank = 0; SELECT \ @rank:= \ @rank +1 AS rank,reading_percent_proficient_and_advanced,school_id從 (SELECT d.school_id,FLOOR(d.reading_percent_proficient + d.reading_percent_advanced)AS reading_percent_proficient_and_advanced FROM dc_nclb_scores_2011 d ORDER BY reading_percent_proficient_and_advanced DESC)AS my_table「,它給了我正確的排名。我需要弄清楚如何從sy_2010_2011_school_type sy表中獲取formatted_school_name。它應該加入sy.school_id = d.school_id。差不多了。謝謝,山姆。 – Laxmidi

+0

re:\ @rank。我不得不添加斜槓,否則它不會讓我發表評論。 – Laxmidi

+0

謝謝Sam DeHaan和鳳凰!我結合你的想法。這可以工作:「SET @ rank = 0; SELECT @rank:= @ rank +1 as rank,formatted_school_name,school_id,reading_percent_proficient_and_advanced FROM(SELECT sy.formatted_school_name, FLOOR(d.reading_percent_proficient + d.reading_percent_advanced)AS reading_percent_proficient_and_advanced,d .school_id AS school_id FROM dc_nclb_scores_2011 d JOIN sy_2010_2011_school_type sy on sy.school_id = d.school_id WHERE sy.school_group ='public school'AND sy.school_type ='elementary'ORDER BY reading_percent_proficient_and_advanced DESC)as sub_table「 – Laxmidi

1

實際上我沒有看到任何JOIN關鍵字,試試這可能嗎?

SET @rank=0; 
SELECT @rank:[email protected]+1 as rank, 
     sy.formatted_school_name, 
     FLOOR(d.reading_percent_proficient + d.reading_percent_advanced) AS reading_percent_proficient_and_advanced 
FROM d_test_scores d JOIN sy_2010_2011_school_type sy on sy.school_id = d.school_id 
WHERE sy.school_group = 'public school' 
     AND sy.school_type ='elementary' 
ORDER BY reading_percent_proficient_and_advanced DESC 

只是一個猜測。

+0

Thank you so much for幫助。我將你的加入與Sam DeHaan的子查詢想法結合起來,並將其運用到工作中。 – Laxmidi