SQL EXTRACT(YEAR FROM MYDATE)不是GROUP BY表达式

时间:2015-06-27 08:44:02

标签: sql oracle

我的表格MYTABLE包含mydate类型的quantityVARCHAR2列。

|mydate|   |quantity|
10/15/2010     15
01/20/2010     20
05/16/2005     30
04/29/2005     50
03/30/2008     5

我想得到:

|year|   |quantity|
  2010         35
  2005         80
  2008          5

我试试:

SELECT 
    to_char(mydate,'yyyy') YEAR, 
    SUM(to_number(quantity)) 
FROM MYTABLE 
GROUP BY 
    to_char(mydate,'yyyy');

但是我收到了错误

  

ORA-00979:不是GROUP BY表达式

我做错了什么?

2 个答案:

答案 0 :(得分:0)

您必须将SELECT的所有列放在GROUP BY中或使用它们将函数压缩为单个值(如MIN,MAX或SUM)。

一个简单的例子来理解为什么会发生这种情况:想象一下,你有一个像这样的数据库:

FOO BAR
0   A
0   B

然后运行SELECT * FROM table GROUP BY foo。这意味着数据库必须返回单行作为结果,第一列0表示GROUP BY,但现在有两个bar值可供选择。您期望哪种结果 - A或B?或者数据库是否应该返回多行,违反GROUP BY的合同?

答案 1 :(得分:0)

试试这个

    select extract(year from mydate),sum(to_number(quant)) from mytable
group by extract(year from mydate);

<强> SQLFiddle Example