0

次の 2 つのステートメントは両方とも、Postgres でエラーを生成します。

SELECT substring(start_time,1,8) AS date, count(*) as total from cdrs group by date;
SELECT substring(start_time,1,8) AS date, count(*) as total from cdrs group by substring(start_time,1,8);

エラーは次のとおりです。

列「cdrs.start_time」は、GROUP BY 句に指定するか、集計関数で使用する必要があります

postgres のドキュメントを読んだところ、SELECT と GROUP BY の両方でpostgres 8.3 SELECT を使用できることがわかりました。

start_time フィールドは文字列で、ccyymmddHHMMSS の形式の日付/時刻を持ちます。mySQL では、望ましい結果と期待される結果の両方が生成されます。

+----------+-------+
| date     | total |
+----------+-------+
| 20091028 |     9 |
| 20091029 |   110 |
| 20091120 |    14 |
| 20091121 |     4 |
+----------+-------+
4 rows in set (0.00 sec)

Postgres (heroku) に固執する必要があります。助言がありますか?

ps GROUP BY に欠落している項目や、mySQL がこれを受け入れる理由、他の人が受け入れない理由など、他にも多くの議論があります... SQL 仕様への厳密な順守などですが、これは1062158/converting- mysql-select-to-postgresqlおよび1769361/postgresql-group-by-different-from-mysqlを参照して、別の質問を保証してください。

4

3 に答える 3

4

どちらのクエリも問題なく機能するため、質問で説明していないことを他に行いました。8.5および8.3.8でテスト済み:

# create table cdrs (start_time text);
CREATE TABLE

# insert into cdrs (start_time) values ('20090101121212'),('20090101131313'),('20090510040603');
INSERT 0 3

# SELECT substring(start_time,1,8) AS date, count(*) as total from cdrs group by date;
   date   | total
----------+-------
 20090510 |     1
 20090101 |     2
(2 rows)

# SELECT substring(start_time,1,8) AS date, count(*) as total from cdrs group by substring(start_time,1,8);
   date   | total
----------+-------
 20090510 |     1
 20090101 |     2
(2 rows)
于 2009-11-23T08:53:39.380 に答える
1

要約すると、エラー

列「cdrs.start_time」は、GROUP BY 句に指定するか、集計関数で使用する必要があります

ORDER BY start_time(この場合)句によって引き起こされました。完全なステートメントは次のいずれかである必要があります。

SELECT substring(start_time,1,8) AS date, count(*) as total FROM cdrs GROUP BY substring(start_time,1,8) ORDER BY substring(start_time,1,8);

また

    SELECT substring(start_time,1,8) AS date, count(*) as total FROM cdrs GROUP BY date ORDER BY date;
于 2009-11-24T19:26:16.763 に答える
0

あなたが試すかもしれない2つの簡単なこと:

  1. postgres 8.4.1 にアップグレードし
    てください

  2. 序数によるグループ化
    つまりGROUP BY 1、この場合です。

于 2009-11-23T05:43:21.120 に答える