【问题标题】:SQL SELECT multiple items ERRORSQL SELECT 多个项目错误
【发布时间】:2016-08-23 23:34:55
【问题描述】:

在给定出版商名称的同时,我想生成一份按年份和月份排序的图书报告。对于每一年和每月,报告应显示 bookid、书名、书名的订单总数、总数量和总销售价值(订单价值和零售价值),同时给出图书 ID

我的代码:

SELECT 
    ShopOrder.OrderDate, Book.BookID, Book.title, 
    COUNT(ShopOrder.ShopOrderID) AS "Total number of order", 
    SUM (Orderline.Quantity) AS "Total quantity", 
    Orderline.UnitSellingPrice * Orderline.Quantity AS "Total order value", 
    Book.Price * OrderLine.Quantity AS "Total retail value" 
FROM 
    ShopOrder, Publisher, Book, Orderline 
WHERE 
    Publisher.name = 'Penguin Books' 
    AND ShopOrder.ShopOrderID = Orderline.ShopOrderID 
    AND Book.BookID = Orderline.BookID 
    AND Publisher.PublisherID = Book.PublisherID 
ORDER BY 
    ShopOrder.OrderDate; 

错误:

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

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

【问题讨论】:

  • 你确定有一个表或视图叫orderline?
  • stackoverflow.com/questions/695289/… - 您没有正确引用表名。您还可以为您的表名设置别名,这样您就不必一遍又一遍地编写它们(我知道这不是问题的一部分,但它会缩短您的查询并使其更易于阅读)。
  • Edited the Error,抱歉之前的错误
  • 感谢状态报告,显示查询和错误。您有问题吗?
  • Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI JOIN 语法-92 SQL 标准(20 多年前),不鼓励使用它

标签: sql


【解决方案1】:

检查您是否有名为 orderline 的表。 要检查它,请执行以下查询

select * from orderline;

很可能,您没有这样的表。

【讨论】:

  • 编辑了问题的错误,对不起我的错误
【解决方案2】:

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

一旦您解决了标识符问题,您的查询将遇到关于 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

【讨论】:

  • 对我上面的问题编辑的新错误,我真的不知道如何解决它。
  • 你看到的只是冰山一角,蚱蜢。
  • 如果您发现某个答案足以回答您提出的问题,您可以选择一个答案。这是 StackOverflow 社区其他成员的考虑,他们可能认为这个问题尚未得到解答。
猜你喜欢
  • 2021-06-23
  • 2013-06-10
  • 1970-01-01
  • 2021-03-27
  • 2011-03-03
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 1970-01-01
相关资源
最近更新 更多