在给出出版商名称的同时,我想制作按年份和月份订购的书籍报告。对于每年和每月,报告应显示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
答案 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