如果是指定字段的行到达值的数量,如何显示有限的记录

时间:2018-01-20 09:26:38

标签: mysql sorting left-join

正如标题所说,实际上可以做到这一点吗? 所以首先我有 的学生

+------------+------- +---------+
| id_student | score_a|score_b  |
+------------+--------+---------+
| 1          | 70     |80       |
+------------+--------+---------+
| 2          | 70     |90       |
+------------+--------+---------+
| 3          | 80     |70       |
+------------+--------+---------+
| 4          | 80     |70       |
+------------+--------+---------+
| 5          | 80     |90       |
+------------+--------+---------+
| 6          | 60     |70       |
+------------+--------+---------+
| 7          | 60     |80       |
+------------+--------+---------+
| 8          |40      |70       |
+------------+--------+---------+

然后

+----------+--------------+
| id_class | limit_people |
+----------+--------------+
| 1        | 1            |
+----------+--------------+
| 2        | 2            |
+----------+--------------+
| 3        | 2            |
+----------+--------------+ 

并注册表

注册

+-------------+-------------+----------+
| id_register | id_students | id_class |
+-------------+-------------+----------+
| 1           | 1           | 1        |
+-------------+-------------+----------+
| 2           | 1           | 2        |
+-------------+-------------+----------+
| 3           | 2           | 2        |
+-------------+-------------+----------+
| 4           | 2           | 3        |
+-------------+-------------+----------+
| 5           | 3           | 1        |
+-------------+-------------+----------+
| 6           | 3           | 3        |
+-------------+-------------+----------+
| 7           | 4           | 3        |
+-------------+-------------+----------+
| 8           | 4           | 2        |
+-------------+-------------+----------+

有没有办法让我们说其中一个类基于class.limit_people字段达到最大限制,不能再包含那些包含那些id_class的记录而不是它们将与其他id_class一起显示他们也有,因为1名学生可以有2个id_class? 例如:class.limit_people = 1id_class = 1,在结果表中有2条使用id_class = 1的记录,不能只显示一次(在{{1上得分较高的学生) }}?

当前查询:

total

通过运行这些查询,导致我有

SELECT 
  register.id_register, 
  register.id_students, 
  (student.score_a + student.score_b)*50/100 AS total,
  register.id_class 
FROM 
  `register` 
LEFT JOIN 
  `student` 
ON (register.id_students = student.id_student)
GROUP BY register.id_students 
ORDER BY total DESC

正如您所看到+-------------+-------------+-------+----------+ | id_register | id_students | total | id_class | +-------------+-------------+-------+----------+ | 3 | 2 | 80 | 2 | +-------------+-------------+-------+----------+ | 1 | 1 | 75 | 1 | +-------------+-------------+-------+----------+ | 5 | 3 | 75 | 1 | +-------------+-------------+-------+----------+ | 7 | 4 | 75 | 3 | +-------------+-------------+-------+----------+ id_students = 3id_class=1显示在桌面上(最大行= 1基于class.limit_people),我想要的结果显示{{1} }}

id_class=3

1 个答案:

答案 0 :(得分:0)

SELECT * FROM students WHERE score >=100 AND ROWNUM <= 3;

这只是为了回答那个在显示三行时得分最高的问题。

0xb7BA52343f45927B9CEAeaaB16228CA6Eb9FE5a4