如何根据价值进行选择" keyed"另一栏?

时间:2016-09-30 03:21:26

标签: postgresql

PostgreSQL新手在这里。我的数据看起来像这样:

+-----------+---------+-------+
| StudentID | ClassID | Grade |
+-----------+---------+-------+
|     19927 | A13     |     5 |
|     19927 | A07     |     3 |
|     19927 | B22     |     7 |
|     10001 | A13     |     2 |
|     10001 | A07     |     8 |
|     22207 | A13     |     7 |
|     22207 | A07     |    10 |
|     22207 | C80     |     2 |
|     27516 | A07     |     8 |
+-----------+---------+-------+

我试图选择A13级成绩高于A07级的所有学生。这意味着只包括实际上在两个班级都有成绩的学生。

最好的方法是什么?在Stata上长大后,我通常会尝试:

  1. 仅选择classID = A07或A13
  2. 的行
  3. 重塑为广泛
  4. 使用A13上的where子句选择> A07
  5. 但我觉得这非常像SQL一样。

1 个答案:

答案 0 :(得分:1)

Postgresql提供了许多不同的方法,这里是一个

SELECT a13.* FROM 
   (SELECT * FROM table1 where classid='A13') as a13
INNER JOIN 
   (SELECT * FROM table1 where classid='A07') as a07
ON a13.grade > a07.grade