在子查询上选择

时间:2016-03-31 20:52:23

标签: sql postgresql select subquery

我是Postgresql的初学者。我有一张桌子"崩溃"与

ID |日期|时间

ID为PK。

我有一个查询计算每天所有崩溃:

SELECT      TO_CHAR(crashs.date, 'DD/MM/YYYY') AS "date", COUNT(crashs."ID") AS "nbCrashs"

FROM        crashs

WHERE       crashs.date >= to_date('2016-03-28','YYYY-MM-DD') AND
        crashs.date <= to_date('2016-03-31','YYYY-MM-DD')

GROUP BY    crashs.date
ORDER BY    crashs.date ASC;

结果:

    date       |  nbCrashs
----------------------------
 29/03/2016    |     2
 30/03/2016    |     4
 31/03/2016    |     3

现在我想选择此查询的最大nbCrashs(所以这里,30/03/2016 - &gt; 4)

我尝试使用SELECT作为子查询,但它不起作用......这是我试过的查询:

SELECT      MAX(CrashsPerDay.nbCrashs)

FROM

(SELECT     TO_CHAR(crashs.date, 'DD/MM/YYYY'), COUNT(crashs."ID") AS "nbCrashs"

FROM        crashs

WHERE       crashs.date >= to_date('2016-03-28','YYYY-MM-DD') AND
            crashs.date <= to_date('2016-03-31','YYYY-MM-DD')

GROUP BY    crashs.date
ORDER BY    crashs.date ASC) AS "CrashsPerDay";

我是法国人,所以我会尝试翻译错误信息,但是我得到了类似于#34;缺少表格的FROM子句的条目&#34; crashsperday&#34;

我的SELECT上的错误点,在&#39; C&#39; &#34; max(&#39; C&#39; rashsPerDay.nbCrashs)&#34;

有人知道如何修复我的查询吗?

感谢您的关注

1 个答案:

答案 0 :(得分:1)

这是一个区分大小写的问题。一旦你开始在"Quotes"中包装你的名字,你必须小心每次引用它时始终将该名称包装在引号中。即以下查询将为您解决问题:

SELECT      MAX("CrashsPerDay"."nbCrashs") -- Fix here
FROM  
(SELECT     TO_CHAR(crashs.date, 'DD/MM/YYYY'), COUNT(crashs."ID") AS "nbCrashs"
FROM        crashs
WHERE       crashs.date >= to_date('2016-03-28','YYYY-MM-DD') AND
            crashs.date <= to_date('2016-03-31','YYYY-MM-DD')
GROUP BY    crashs.date
ORDER BY    crashs.date ASC) AS "CrashsPerDay";

或者,或许更好:

SELECT      MAX(CrashsPerDay.nbCrashs)
FROM  
(SELECT     TO_CHAR(crashs.date, 'DD/MM/YYYY'), COUNT(crashs."ID") AS nbCrashs -- fix here
FROM        crashs
WHERE       crashs.date >= to_date('2016-03-28','YYYY-MM-DD') AND
            crashs.date <= to_date('2016-03-31','YYYY-MM-DD')
GROUP BY    crashs.date
ORDER BY    crashs.date ASC) AS CrashsPerDay; -- and fix here

换句话说:

  • 这两个名称相同(不区分大小写):CrashsPerDaycrashsperday
  • 这两个名称不相同(区分大小写):"CrashsPerDay""crashsperday"
  • 在PostgreSQL中,这两个名称相同(默认为小写):crashsperday"crashsperday"

OCD奖励修复:It's "crashes", not "crashs"; - )

相关问题