此查询未提供预期结果,
我想做什么:
我正在尝试根据两个不同的列/字段和值对用户进行排名。并且希望在最高级别上显示最高级别的用户。
我在选择查询中创建虚拟列作为RANK并使用两个CASE ... AS RANK。
这是好习惯吗?还是有更好的出路?
PS:我真的不想坚持RANK所以不要存储它们,因为它会从各个领域变得动态(这只是两个领域的例子)SELECT *,
CASE EMPLOYEEOF
WHEN 'ASDF' THEN @RANK := @RANK+1
END AS RANK,
CASE VENDOROF
WHEN 'WXYZ' THEN @RANK := @RANK+1
END AS RANK
from USERMASTER, (SELECT @RANK := 0) r ORDER BY RANK DESC;
编辑:没有给出!在第1行
答案 0 :(得分:0)
如果你想从一个表(USERMASTER)中选择,生成一个计算的排名,然后按给定的排名进行排序,这就是你如何有效地做到这一点。
1)确定您的排名标准 - 找出对您的排名至关重要的事项,无论是花费的金额,学生成绩等,了解您的指标会有什么帮助。
2)写下你的逻辑 - 当包含多个条件时,CASE语句很棒。例如,如果你想给GPA高于3.0且等级等于“A”的等级的学生提供更高的等级,但是你想要降低GPA的等级,你可能会说:
SELECT CASE WHEN student_grade = 'A'
AND student_gpa > 3.0
THEN 4
ELSE 3
END rank
FROM students
ORDER BY rank DESC
这将基于student_grade和student_gpa逻辑创建一个排名列,然后根据此计算排名按照最高排名顺序对学生进行排序。
3)测试您的案例 - 通过查看一些示例数据,验证您的逻辑是否为您提供了所需的结果。对于我的例子(因为我不知道你的标准:
student student_grade student_gpa
John A 3.5
Mike B 2.9
运行上面的结果(在student_name上使用group by):
student_name rank
John 4
Mike 3
我的结果与我的预期结果一致(约翰的排名高于4,并且由于订单而出现在我的列表顶部)我们已经完成了!