2

次のように形成されたデータベースがあります。

 descr    | hours |   timer    
----------+-------+------------
 foo      |   1.3 | 2012-07-14
 foo      |   2.5 | 2012-07-15
 foo      |  2.35 | 2012-07-16
 bar      |     1 | 2012-08-16
 baz      |     1 | 2012-08-16
 buh      |     5 | 2012-08-17

これは私が期待することを行います:

abc=# select extract('month' from timer) as Month, sum(hours) from foo group by Month     order by 1;

 month | sum  
 ------+------
 7     | 6.15
 8     |    7

これは私が期待することを完全に行いません:

abc=# select to_char(timer, 'Month'), sum(hours) from foo group by 1 order by 1 asc;

 to_char  | sum  
----------+------
August    |    7
July      | 6.15

望ましい結果は次のとおりです。

month     | sum
----------+-----
July      | 6.15
August    |    7

#3 で物事が起こっている理由は理解していますが、PostgreSQL 内で可能な限り最も効率的な方法で、どのように望ましい結果を達成するのでしょうか?

4

1 に答える 1

4

ORDER BYセクションで抽出式を使用できます。

SELECT to_char(timer, 'Month'), SUM(hours)
FROM foo
GROUP BY to_char(timer, 'Month'), extract('Month' from timer)
ORDER BY extract('Month' from timer) ASC;

このクエリは、望ましい結果をもたらします。

于 2012-10-10T16:15:12.070 に答える