SQL SELECT多项ERROR

时间:2016-04-29 00:30:51

标签: sql

在给出出版商名称的同时,我想制作按年份和月份订购的书籍报告。对于每年和每月,报告应显示bookid,标题,标题的订单总数,总数量和总销售价值(订单价值和零售价值),同时给出书籍ID

我的代码:

net.razorvine.pickle.PickleException: expected zero arguments for construction of ClassDict (for pyspark.sql.types._create_row)

错误:

  

列“shoporder.orderdate”必须出现在GROUP BY子句中或用于聚合函数
  第1行:选择ShopOrder.OrderDate,Book.BookID,Book.title,COUNT(S ...                  ^

     

错误:列“shoporder.orderdate”必须出现在GROUP BY子句中或用于聚合函数
  SQL状态:42803
  性格:8

2 个答案:

答案 0 :(得分:0)

检查您是否将表命名为orderline。 检查它是否执行以下查询

select * from orderline;

最有可能的是,你没有这样的表。

答案 1 :(得分:0)

感谢状态报告。你有问题吗?

一旦解决了标识符问题,您的查询就会遇到SELECT列表中非聚合的错误,这些错误不在GROUP BY子句中。

2016年。过去的时间是抛弃旧学校逗号运算符进行连接操作,并使用JOIN关键字将连接谓词移动到适当的ON子句。

导致此错误的最可能原因(这只是 猜测)是指" Orderline"创建了表,表的名称用双引号括起来,表名中至少有一个大写字母。现在表名是区分大小写,对表的引用必须用双引号括起来,并且表的名称必须完全匹配,包括大小写。

由于更新了问题,

编辑

在向查询添加聚合函数之前,我建议您验证查询是否返回了您期望的行。

SELECT s.OrderDate
     , b.BookID
     , b.title
     , s.ShopOrderID
     , o.Quantity
     , o.UnitSellingPrice * o.Quantity  AS "Total order value"
     , b.Price * o.Quantity             AS "Total retail value" 
  FROM ShopOrder s
  JOIN Orderline o
    ON o.ShopOrderID = s.ShopOrderID
  JOIN Book
    ON b.BookID = o.BookID 
  JOIN Publisher p
    ON p.PublisherID = b.PublisherID 
 WHERE p.name = 'Penguin Books' 
 ORDER
    BY s.OrderDate
     , s.ShopOrderID
     , b.BookID
     , o.Quantity

然后,您可以处理添加聚合函数。 SELECT列表中任何不聚合的表达式(MAX(),MIN(),SUM(),COUNT())必须出现在GROUP BY子句中。

SELECT b.BookID
     , b.title
     , SUM(o.UnitSellingPrice * o.Quantity)  AS "Total order value"
     , SUM(b.Price * o.Quantity)             AS "Total retail value" 
  FROM ShopOrder s
  JOIN Orderline o
    ON o.ShopOrderID = s.ShopOrderID
  JOIN Book
    ON b.BookID = o.BookID 
  JOIN Publisher p
    ON p.PublisherID = b.PublisherID 
 WHERE p.name = 'Penguin Books' 
 GROUP
    BY b.BookID
     , b.title
 ORDER
    BY b.BookID
     , b.title