我的表格MYTABLE
包含mydate
类型的quantity
和VARCHAR2
列。
|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表达式
我做错了什么?
答案 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 强>