0

しばらくの間MySQLで正常に実行したクエリを作成していますが、Postgresではoleで機能していません-

エラー:列「orders.created_at」をGROUPBY句に含める必要があります
または集計関数で使用されます

クエリは次のとおりです。

SELECT SUM(total) AS total, to_char(created_at, 'YYYY/MM/DD') AS order_date 
FROM orders 
WHERE created_at >= (NOW() - INTERVAL '2 DAYS') 
GROUP BY to_char(created_at, 'DD') 
ORDER BY created_at ASC;

これは、次のようなものを返すことになっています。

  合計| 注文日
--------- + ------------
 1099.90 | 2013/01/15
  650.00 | 2013/01/16
 4399.00 | 2013/01/17

主なことは、その月の個々の日ごとに合計をグループ化することです。

誰かアイデアがありますか?

アップデート:

日ごとにグループ化する理由は、グラフにその月の各日とそれぞれの総売上高のラベルが付けられるためです。

1日-$3400.00
2位-$2237.00
3位-$1489.00

4

2 に答える 2

2

これを実行するために必要なSQLは次のとおりです。groupbyとorderbyには、同じ式を含める必要があります。

SELECT SUM(total) AS total, 
to_char(created_at, 'YYYY/MM/DD') AS order_date 
FROM orders 
WHERE created_at >= (NOW() - INTERVAL '2 DAYS') 
GROUP BY to_char(created_at, 'YYYY/MM/DD')
order by  to_char(created_at, 'YYYY/MM/DD') 

http://sqlfiddle.com/#!12/52d99/2

これがお役に立てば幸い、マット

于 2013-01-18T02:44:59.323 に答える
2

なぜそこで変換を行っているのかわかりません。私はこれを行う方が良いと思います:

SELECT 
  SUM(total) AS total, 
  created_at::date AS order_date 
FROM 
  orders 
WHERE 
  created_at >= (NOW() - INTERVAL '2 DAYS') 
GROUP BY 
  created_at::date 
ORDER BY 
  created_at::date ASC;

このクエリをお勧めします。次に、グラフ設定を使用してグラフの日次ラベルをフォーマットし、グループ化されるさまざまな月の同じ日の奇妙な問題が発生しないようにします。ただし、編集で表示する内容を取得するには、次のようにします。

SELECT 
  SUM(total) AS total, 
  to_char(created_at, 'DDth') AS order_date 
FROM 
  orders 
WHERE 
  created_at >= (NOW() - INTERVAL '2 DAYS') 
GROUP BY 
  to_char(created_at, 'DDth') 
ORDER BY 
  to_char(created_at, 'DDth') ASC;
于 2013-01-18T02:49:11.873 に答える