我正在嘗試計算一個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
)
@juergend所以在這個問題上接受的答案也是錯??http://stackoverflow.com/questions/3333665/mysql-rank-function – NeuronQ 2013-05-12 07:41:40
你能提供樣本數據嗎?我不明白爲什麼你的查詢應該產生奇怪的結果。它對我來說不可重現。 – fancyPants 2013-05-12 10:26:24
沒有反應?投票結束,因爲太局部化了。 – fancyPants 2013-05-12 18:53:11