我需要一些有关 MySQL SELECT 语句的帮助。不幸的是,这个声明不能正确工作。它似乎是根据学校名称的字母顺序而不是reading_percent_proficient_and_advanced进行排名。我应该如何修复它?
SET @rank=0;
SELECT @rank:=@rank+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:=@rank+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;
我的加入有什么问题吗?
最佳答案
(猜测)我相信在执行 ORDER BY 排序之前会计算排名。在原始查询中,您的结果恰好在 ORDER BY 之前按照您想要的顺序返回,因此排名是正确的,在高级查询中,结果最初以不同的顺序返回。
尝试将排名添加到已排序学校名称和熟练程度评级集(子查询)中。
关于mysql - MySQL 加入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7098282/