PostgreSQL中的简单表关系

时间:2018-02-24 10:00:32

标签: python sql postgresql

我有练习练习,我用Django做过,但我不知道如何在纯粹的SQL中做到这一点。

就是这个:

  

编写一个返回每辆车的SQL查询以及该车的最高速度。

cars
 id         car
1566       ferrar
2894       jaguar

speeds
car       date          speed
1566    2010-01-25        255
1566    2010-01-26        265
2894    2010-01-25        195
2894    2010-01-26        240

你能帮我吗?

2 个答案:

答案 0 :(得分:1)

PostgreSQL的方法是

SELECT DISTINCT ON (code)
   cl.address, co.consumption
FROM client cl
   JOIN consumption co USING (code)
ORDER BY co.consumption DESC;

DISTINCT ON将选择每code的第一行,即consumption最大的一行。

答案 1 :(得分:0)

有几种方法可以处理这样的要求。一种方法是连接两个表并使用窗口函数rank来过滤最大消耗的日期:

SELECT address, date
FROM   (SELECT address,
               date,
               RANK() OVER (PARTITION BY co.code ORDER BY consumption DESC) rk
        FROM   clients cl
        JOIN   consumption co ON cl.code = cl.code)
WHERE  rk = 1