【问题标题】:mysql pivot query and rank Querymysql数据透视查询和排名查询
【发布时间】:2012-12-31 20:30:02
【问题描述】:

我有一个标记表,例如:

ID STUDENT_ID Branch_id Class_id Exam_id Subject_id Numbers Date 1 653 5 1 1 8 60 2012-01-01 2 653 5 1 1 9 40 2012-01-01 3 653 5 1 1 10 80 2012-01-01 4 653 5 1 1 11 50 2012-01-01 5 653 5 1 1 12 65 2012-01-01 6 653 5 1 1 13 33 2012-01-01 7 653 5 1 1 15 86 2012-01-01 8 222 5 1 1 8 100 2012-01-01 9 222 5 1 1 9 80 2012-01-01 10 222 5 1 1 10 92 2012-01-01 11 222 5 1 1 11 50 2012-01-01 12 222 5 1 1 12 65 2012-01-01 13 222 5 1 1 13 33 2012-01-01 7 222 5 1 1 15 86 2012-01-01

我想获得排名我得到了这个question的答案

此外,当我获取所有类结果时,我使用数据透视查询:

SELECT stu_id, sum(numbers) AS total, branch_id, depart_id, class_id,
 SUM( IF( subject_id =1, numbers, 0 ) ) AS MAth,
 SUM( IF( subject_id =2, numbers, 0 ) ) AS Eng,
SUM( IF( subject_id =3, numbers, 0 ) ) AS Science
FROM marksheet where branch_id = 1 AND depart_id = 1
 AND class_id = 1 GROUP BY stu_id ORDER BY total DESC

我想在我的班级查询(枢轴查询)中获得排名?我想数一下有多少学生在第一名,多少名在第二和第三名?

所需数据样本:

ID 姓名 数学 英语 科学 总百分比 位置 排名

有人帮忙吗?

【问题讨论】:

  • 您能否将其设为子查询并根据此结果执行类似的分组?
  • 我无法理解我想要的每一个可能的答案
  • 数字是结果吗?
  • 如果这两种可能之一,请回答?使用枢轴查询或计数排名获取排名?

标签: mysql pivot rank


【解决方案1】:

我认为您需要做的是创建第二个表,其中包含正在引用的年级边界,例如:

ID    grade    start_boundry    end_boundry
1       A             60            100     

等等..

然后在表之间创建一个连接,然后在数字和开始/结束边界之间执行WHERE 语句

所以->

SELECT grade FROM boundries_table RIGHT JOIN  sudent_table
WHERE boundries_table.start_boundry < student_table.numbers
AND boundries_table.end_boundry > student_table.numbers

我认为如果我的 MySQL 内存可用,这应该可以工作,只需将表修改为您需要它运行的方式,它应该可以满足您的需要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-03
    • 2017-12-19
    • 2016-06-22
    • 1970-01-01
    • 2020-08-29
    • 2011-06-18
    • 2021-10-24
    • 1970-01-01
    相关资源
    最近更新 更多