我正在尝试计算MySQL表的排名,按表colum排名,该列也包含NULL值。我找到了the snippet from this questions's answer,并根据我的用例对其进行了调整,但它不起作用 - @rownum := @rownum + 1 as rank
似乎是order by
在排序之前的计算机 order by
我的问题是:为什么会发生这种情况?在 global_average_rating_overall
标准MySQL行为之前,是否正在执行变量增量?它与NULL有什么关系(它们不应该最后排序而不会影响其他任何东西吗?)。
现在,我已经用SELECT子句中的子查询解决了我的排名计算问题,但是我希望这个带变量的方法会更高效,因为没有涉及子查询,我也想要更好了解查询中的变量如何工作。
这是一个示例查询(注意: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;
也包含NULL - 这可能是导致奇怪行为的原因吗?):
ID global_average_rating_overall rank
--+------------------------------+-----
3 4 14
9 3.9 22
7 3.75 11
... 1
... 2
... 3
结果如下:
global_average_rating_overall
(请注意{{1}}的排名与排名不匹配的最后排名
答案 0 :(得分:0)
在查询执行期间读取和写入同一个变量是未定义的。如果排序由索引执行,则赋值可能与在临时表中执行排序的方式不同。