2013-05-12 106 views
2

我正在嘗試計算一個MySQL表的排名,排名由也包含NULL值的表柱排序。我發現the snippet from this questions's answer,並將其適用於我的使用情況,但它不起作用 - 看起來@rownum := @rownum + 1 as rank是計算機之前排序order by爲什麼這個MySQL查詢不能正確計算行列?

我的問題是:爲什麼會發生這種情況?正在做之前的變量增量order by標準的MySQL行爲?它與NULL有什麼關係(不應該只是最後排序而不影響其他任何內容?)。

現在,我已經在SELECT子句中用子查詢解決了我的等級計算問題,但是我希望這個帶有變量的方法效率更高,因爲沒有子查詢,我也想得到更好地理解查詢中變量的工作方式。


這是一個例子查詢(注:global_average_rating_overall也包含空值 - 可能這是怪異的行爲的原因是什麼?):

set @rownum := 0; 
select 
    ID, 
    post_title, 
    m.meta_value as global_average_rating_overall, 
    @rownum := @rownum + 1 as rank 
from 
    wp_posts p 
    left join wp_postmeta m on m.post_id = p.ID and m.meta_key = 'global_average_rating_overall' 
where 
    p.post_status = 'publish' 
order by global_average_rating_overall desc; 

結果是沿着線:

ID global_average_rating_overall rank 
--+------------------------------+----- 
3 4        14 
9 3.9       22 
7 3.75       11 
...         1 
...         2 
...         3 

(注意與排名不符的排名global_average_rating_overall

+0

@juergend所以在這個問題上接受的答案也是錯??http://stackoverflow.com/questions/3333665/mysql-rank-function – NeuronQ 2013-05-12 07:41:40

+0

你能提供樣本數據嗎?我不明白爲什麼你的查詢應該產生奇怪的結果。它對我來說不可重現。 – fancyPants 2013-05-12 10:26:24

+0

沒有反應?投票結束,因爲太局部化了。 – fancyPants 2013-05-12 18:53:11

回答

0

在查詢執行期間讀取和寫入相同的變量未定義。如果通過索引執行排序,則與在臨時表中執行排序的情況相比,分配可能會有所不同。

相關問題