EG:取出没门课程的第一名:
CREATE TABLE window_test
(id int,
name text,
subject text,
score numeric
);
INSERT INTO window_test VALUES (1,'小黄','数学',99.5), (2,'小黄','语文',89.5),(3,'小黄','英语',79.5), (4,'小黄','物理',99.5), (5,'小黄','化学',98.5), (6,'小红','数学',89.5), (7,'小红','语文',99.5), (8,'小红','英语',79.5), (9,'小红','物理',89.5), (10,'小红','化学',69.5),(11,'小绿','数学',89.5), (12,'小绿','语文',91.5), (13,'小绿','英语',92.5),(14,'小绿','物理',93.5), (15,'小绿','化学',94.5);
root@my3308.sock-8.0.11>[employees]>select * from window_test;
+------+--------+---------+-------+
| id | name | subject | score |
+------+--------+---------+-------+
| 1 | 小黄 | 数学 | 100 |
| 2 | 小黄 | 语文 | 90 |
| 3 | 小黄 | 英语 | 80 |
| 4 | 小黄 | 物理 | 100 |
| 5 | 小黄 | 化学 | 99 |
| 6 | 小红 | 数学 | 90 |
| 7 | 小红 | 语文 | 100 |
| 8 | 小红 | 英语 | 80 |
| 9 | 小红 | 物理 | 90 |
| 10 | 小红 | 化学 | 70 |
| 11 | 小绿 | 数学 | 90 |
| 12 | 小绿 | 语文 | 92 |
| 13 | 小绿 | 英语 | 93 |
| 14 | 小绿 | 物理 | 94 |
| 15 | 小绿 | 化学 | 95 |
+------+--------+---------+-------+
15 rows in set (0.00 sec)
直接写成如下形式:发现结果并不对。如何解决呢?
root@my3308.sock-8.0.11>[employees]>select id,name,subject,max(score) from window_test group by subject;
+------+--------+---------+------------+
| id | name | subject | max(score) |
+------+--------+---------+------------+
| 1 | 小黄 | 数学 | 100 |
| 2 | 小黄 | 语文 | 100 |
| 3 | 小黄 | 英语 | 93 |
| 4 | 小黄 | 物理 | 100 |
| 5 | 小黄 | 化学 | 99 |
+------+--------+---------+------------+
5 rows in set (0.00 sec)
1.当没有窗口函数之前我们使用哪几种方法:
方法一:使用jion 形式