【问题标题】:SQL query to find total sale per month - oracleSQL 查询以查找每月的总销售额 - oracle
【发布时间】:2016-03-01 07:10:47
【问题描述】:

我有两张表,products(pid, pname, quantityinhand, price, discount) purchase(pid, qty, p_time, total_price) // 其中 qty 是售出的单位数。 我需要找到 pname、pdate(以 mon yyyy 格式)、特定月份每个 pid 的总销售量、一个月内销售的产品总价、平均价格(total_price/quantity)。

我尝试的查询如下

select pname, p_time, qty_month, amount_month, avg_sale 
FROM 
  ( select p.pname, to_char(q.ptime,'MON yyyy') p_time, 
            sum(qty) as qty_month, sum(total_price) as amount_month,
            (q.total_price/q.qty) as avg_sale from products p, purchases q
    where p.pid=q.pid
    group by pname, ptime)

我收到此错误 -> (q.total_price/q.qty) as avg_sale from products p, purchase q

第 4 行出现错误:ORA-00979:不是 GROUP BY 表达式。

我做错了什么?

简而言之,我需要找到每种产品的每月统计数据。

通过添加 "group by pname, ptime, total_price, qty" 我得到了结果,将发布另一个问题,要求程序以 pid 作为参数并给出包括 pname 在内的每月销售统计信息从产品表。

【问题讨论】:

  • 能否请您提供两个表的表结构
  • 使用to_char(q.ptime,'MON yyyy')而不是组中的别名,因为您使用的聚合函数不能与它一起使用(q.total_price/q.qty)
  • SUM((q.total_price/q.qty) as avg_sale)
  • @PK20 谢谢伙计,我按 pname、ptime、total_price、qty 添加了组,现在需要以存储过程的形式找到相同的结果,以 pid 作为参数并给出每月的统计信息特定产品

标签: sql oracle group-by


【解决方案1】:

试试这个

SELECT pname, 
       p_time, 
       qty_month, 
       amount_month, 
       (amount_month/qty_month) as avg_sale 
FROM 
  ( 
    SELECT   p.pname, 
             to_char(q.ptime,'MON yyyy') p_time, 
             sum(qty) as qty_month, 
             sum(total_price) as amount_month 
    FROM     products p, purchases q
    WHERE    p.pid=q.pid
    GROUP BY pname, to_char(q.ptime,'MON yyyy')
  )

【讨论】:

  • 谢谢哥们,现在需要做一个以pid为参数的程序。尝试后将发布另一个问题。
  • 我创建了一个过程,它没有错误地构建,但是当我执行它时,它给出了错误,第 1 行的错误没有找到数据。我有一段时间不能发布另一个问题,我应该在 cmets 中发布它吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多