使用AVG对mysql查询结果进行排名
我有一个在MySQL中对结果进行排序的查询:使用AVG对mysql查询结果进行排名,mysql,Mysql,我有一个在MySQL中对结果进行排序的查询: SET @rank := 0; SELECT Name, Score, @rank := @rank + 1 FROM Results ORDER BY Score 这很好,直到我尝试根据平均分数进行排名: SET @rank := 0; SELECT Name, AVG(Score) as AvScore, @rank := @rank + 1 FROM Results ORDER BY AvScore 如果我运行这个,我只得到一个记录
SET @rank := 0;
SELECT Name, Score, @rank := @rank + 1
FROM Results
ORDER BY Score
这很好,直到我尝试根据平均分数进行排名:
SET @rank := 0;
SELECT Name, AVG(Score) as AvScore, @rank := @rank + 1
FROM Results
ORDER BY AvScore
如果我运行这个,我只得到一个记录回来,因为平均值。然而,如果我添加一个组的名字,这样我可以得到每个人列出的平均值,这会弄乱正确的排名
我知道答案可能就在眼前,但我不太明白。如何根据每个名称的平均结果输出其排名?您需要使用子查询:
SET @rank := 0;
SELECT a.name,
a.avscore,
@rank := @rank + 1
FROM (SELECT name,
Avg(score) AS AvScore
FROM results
GROUP BY name) a
ORDER BY a.avscore
您需要使用子查询:
SET @rank := 0;
SELECT a.name,
a.avscore,
@rank := @rank + 1
FROM (SELECT name,
Avg(score) AS AvScore
FROM results
GROUP BY name) a
ORDER BY a.avscore
您必须先排序,然后从派生表中选择秩:
SELECT Name, AvScore, @rank := @rank + 1
FROM (
SELECT Name, AVG(AvScore) AS AvScore FROM Results
GROUP BY Name ORDER BY AVG(AvScore)
) t1, (SELECT @rank = 0) t2;
您必须先排序,然后从派生表中选择秩:
SELECT Name, AvScore, @rank := @rank + 1
FROM (
SELECT Name, AVG(AvScore) AS AvScore FROM Results
GROUP BY Name ORDER BY AVG(AvScore)
) t1, (SELECT @rank = 0) t2;
谢谢,这件非常合身!如何将变量集合并到查询中,以便不必在php中运行多重查询?谢谢,这非常适合!如何将变量集合并到查询中,以便不必在php中运行多重查询?收回这一点,我实际上得到的是null?它的排序很好,只是不会输出排名…?收回,我实际上得到的是空值?它的顺序很好,只是不会输出排名。。。?