2016-03-31 16 views
0

私はPostgresqlの初心者です。私はテーブルを "クラッシュ"させるサブクエリのSELECT

ID |日付|時間

IDはPKです。 、30を

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

今私はここに(このクエリの最大nbCrashsを選択します:

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; 

と結果:

私は一日あたりのすべてのcrashsをカウントしているクエリを持っています/ 03/2016 - > 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"; 

私はので、私は、エラーメッセージを翻訳するためにフランス語みますが、私のようなものを得た上で、私のSELECTのcrashsperday 『

エラーポイント、「テーブルのFROM句のエントリを行方不明』 'C' of "max( 'C'rashsPerDay.nbCrashs)"

誰かが私のクエリを修復する方法を知っていますか?

あなたの注意をありがとう

+0

数? –

+0

別名を付ける必要があるかどうか疑問に思う:TO_CHAR(crashs.date、 'DD/MM/YYYY') –

+0

GROUP BYは1日のクラッシュ数を数えるために使用されます。これを削除すると次のようになります: 29/03/2016 | 1 30/03/2016 | 1 30/03/2016 | 1 30/03/2016 | 1 31/03/2016 | 1 31/03/2016 | 1 エイリアスについては、私はSQL Serverから来ているので、いくつかの問題はありますが、私のエイリアスはすべて引用符で囲まれています。しかし、あなたは正しいです、私は "SELECT Max(nbCrashs)を使用することができますが、次のエラーが表示されます:" NbCrashsは存在しません " –

答えて

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 

を:

  • これら2つの名前は同じ(大文字と小文字を区別しない)です:CrashsPerDaycrashsperday
  • これら2つの名前は同じではありません(大文字と小文字は区別されます):"CrashsPerDay"とと"crashsperday"

OCDのボーナス修正::

  • は、PostgreSQLでは、これら2つの名前が同じ(デフォルトでは小文字)ですつ以上の日が最大値を持っている場合はどうすればIt's "crashes", not "crashs" ;-)

  • +0

    ありがとうたくさん!それは動作します! –

    関連する問題