当前位置: 首页 > 面试题库 >

SQL-汇总函数中的子查询

蒲魁
2023-03-14
问题内容

我正在使用northwind数据库通过创建一些或多或少复杂的查询来刷新我的SQL技能。不幸的是,我找不到最后一个用例的解决方案:“获得1997年每个类别的五个最大订单的总和。”

涉及的表是:

Orders(OrderId, OrderDate)
Order Details(OrderId, ProductId, Quantity, UnitPrice)
Products(ProductId, CategoryId)
Categories(CategoryId, CategoryName)

我尝试了以下查询

SELECT c.CategoryName, SUM(
  (SELECT TOP 5 od2.UnitPrice*od2.Quantity 
   FROM [Order Details] od2, Products p2
   WHERE od2.ProductID = p2.ProductID
   AND c.CategoryID = p2.CategoryID
   ORDER BY 1 DESC))
FROM [Order Details] od, Products p, Categories c, Orders o 
WHERE od.ProductID = p. ProductID
AND p.CategoryID = c.CategoryID
AND od.OrderID = o.OrderID
AND YEAR(o.OrderDate) = 1997
GROUP BY c.CategoryName

好吧……原来,子查询在聚合函数中是不允许的。我已经阅读了有关此问题的其他文章,但是找不到针对我的特定用例的解决方案。希望你能帮我…


问题答案:

聚合函数中通常不允许使用子查询。相反,移动骨料 的子查询。在这种情况下,由于top 5

SELECT c.CategoryName,
  (select sum(val)
   from (SELECT TOP 5 od2.UnitPrice*od2.Quantity as val
         FROM [Order Details] od2, Products p2
         WHERE od2.ProductID = p2.ProductID
         AND c.CategoryID = p2.CategoryID
         ORDER BY 1 DESC
        ) t
  )
FROM [Order Details] od, Products p, Categories c, Orders o 
WHERE od.ProductID = p. ProductID
AND p.CategoryID = c.CategoryID
AND od.OrderID = o.OrderID
AND YEAR(o.OrderDate) = 1997
GROUP BY c.CategoryName, c.CategoryId


 类似资料:
  • 本文向大家介绍C++中的函数汇总,包括了C++中的函数汇总的使用技巧和注意事项,需要的朋友参考一下 math.h 数学函数库,一些数学计算的公式的具体实现是放在math.h里,具体有: 1 三角函数 2 反三角函数 3 双曲三角函数 4 指数与对数 5 取整 6 绝对值 7 标准化浮点数 8 取整与取余 9 平方根 总结 以上所述是小编给大家介绍的 C++中的函数汇总,希望对大家有所帮助,如果大家

  • 问题内容: 我需要编写一个查询,该查询从表中返回汇总和非汇总数据。 下面的示例应有助于阐明我要执行的操作。我有以下(简化)表: 为了便于讨论,假设每个学生都属于一个课程组。我想编写一个查询,该查询将返回如下结果集: student.name,student.weight,weight_apgaw,weight_apgh 在哪里: weight_apgaw: 是单个学生的体重,表示为他/她所属课程组

  • 协程短名称 简化协程相关API的名称书写。可修改php.ini设置swoole.use_shortname=On/Off来开启/关闭短名,默认为开启。 所有的 Swoole\Coroutine 前缀的类名映射为Co。此外还有下面的一些映射: 创建协程 //Swoole\Coroutine::create等价于go函数 go(function () { co::sleep(0.5);

  • 问题内容: 我想要做的是计算子查询返回的行数,本质上如下: 这是我的错误信息: 为什么这不起作用?如果select仅返回一堆具有过滤条件的行,为什么我不能计算行数或返回的行数? 我正在计算拥有的不同员工的数量。按分组。 这是有关我的数据库的一些结构信息,作为查询的一部分。 谢谢! 问题答案: 试试这个 或这个

  • 本文向大家介绍Lua中的常用函数库汇总,包括了Lua中的常用函数库汇总的使用技巧和注意事项,需要的朋友参考一下 lua库函数 这些函数都是Lua编程语言的一部分, 点击这里了解更多. assert(value) - 检查一个值是否为非nil, 若不是则(如果在wow.exe打开调试命令)显示对话框以及输出错误调试信息 collectgarbage() - 垃圾收集器. (新增于1.10.1) da

  • 本文向大家介绍PHP中iconv函数知识汇总,包括了PHP中iconv函数知识汇总的使用技巧和注意事项,需要的朋友参考一下 今天在修改论文在线的时候,遇到了iconv这个函数。学习一下 这段代码的意思,就是把utf-8格式转化为gb2312的格式,然后赋值给$name,这样导出excel文件的名字的时候,就是中文的$name的名字。 下边是关于这个函数的详细和延伸用法 ignore的意思是忽略转换