views:

37

answers:

2

HI I try to run :

 select
  year,
  regr_slope(sum(sale_count),year) as slope,
from products
group by year

It throws "00937. 00000 - "not a single-group group function"" .When i delete year from select clause problem disapears. Shouldn't I be able to select column with which I'm grouping?

Oracle 11.2 sqldeveloper

ty for help !

+2  A: 

It's because you're attempting to use a function (REGR_SLOPE) that can be either an aggregate (or analytical) function on the result of another aggregate (SUM) - use:

  SELECT x.year,
         REGR_SLOPE(sum_sales, x.year) AS slope
    FROM (SELECT y.year,
                 SUM(y.sale_count) AS sum_sales
            FROM PRODUCTS y
        GROUP BY y.year) x
GROUP BY x.year

Alternative using WITH clause (Oracle 9i+):

WITH sums AS (
     SELECT y.year,
            SUM(y.sale_count)
       FROM PRODUCTS y
   GROUP BY y.year)
  SELECT x.year,
         REGR_SLOPE(sum_sales, x.year) AS slope
    FROM sums x
GROUP BY x.year
OMG Ponies
+1  A: 

Did you try it like this?

select
   a.year
 , regr_slope(a.sale_count,a.year) as slope,
from (SELECT year
           , sum(sale_count) sale_count
        FROM products
      GROUP BY year) a
dcp