返回组中最高总数的数据

Posted

技术标签:

【中文标题】返回组中最高总数的数据【英文标题】:Returning data for the highest total in a group 【发布时间】:2015-02-04 08:34:15 【问题描述】:

我有这些表:

客户,其中包括:帮助他们的员工的员工 ID 订单,其中包括:订单号、产品 ID、发货日期、订购该商品的客户名称 orderdetails,包括订单号、数量、产品 ID 员工,包括名字、姓氏

如何显示销售产品数量最多的员工的姓氏和名字?

我知道我必须使用多个连接、别名和一些 HAVING 语句,但我不确定如何继续。

【问题讨论】:

您能否确认productorders 上,而不是在order details - 即details 表上,quantity 指的是什么,如果不是@987654327 @/item/product code? 我怀疑您设置了重复帐户:***.com/questions/27327810/… @StuartLC,编辑了它,我希望它更清楚! @MitchWheat 哈哈,这实际上是一个小组成员。我们都在一起做这个项目。 你的意思是你们都'没有工作',而只是将问题发送给 SO! 【参考方案1】:

试试这个:

SELECT e.FirstName, e.LastName, SUM(od.Quantity) AS Quantity
FROM OrderDetails od 
INNER JOIN Orders o ON od.OrderId = o.OrderId
INNER JOIN Customers c ON o.CustomerName = c.CustomerName 
INNER JOIN Employees e ON c.EmployeeId = e.EmployeeId 
GROUP BY e.FirstName, e.LastName
ORDER BY Quantity DESC;

【讨论】:

【参考方案2】:

您根本不需要HAVING。正如您所建议的,在连接键上连接所有表,然后按两个员工姓名列进行分组。

以下查询(带有派生表)应该与任何 RDBMS 无关,但不包括将结果限制为仅一行的最终考虑,这取决于 RDBMS

SELECT d.FirstName, d.LastName, d.TotalQuantity
FROM
(
    SELECT e.FirstName, e.LastName, SUM(od.Quantity) AS TotalQuantity
    FROM OrderDetails od 
    INNER JOIN Orders o ON OrderDetails.OrderId = o.OrderId
    INNER JOIN Customers c ON o.CustomerName = c.CustomerName -- Switch to a surrogate key
    INNER JOIN Employees e ON c.EmployeeId = e.EmployeeId 
    -- WHERE od.ProductId = `FooBars` -- If you need a filter
    GROUP BY e.FirstName, e.LastName
) d
ORDER BY d.TotalQuantity DESC;

对于“仅***员工”要求,您需要将行数限制为 1,这取决于 RDBMS:

mysql 的最后一行更改为 ORDER BY ... LIMIT 1; 或将最后一行更改为 ORDER BY ... FETCH FIRST 1 ROWS ONLY; 以获得较新版本的 SqlServer 和 Oracle 或将旧版本 SqlServer 的第一行更改为 SELECT top 1 d.FirstName, ..

注意事项:

根据评论,产品 id 在 Orders 表上似乎很奇怪,sku / 商品代码通常在订单商品级别 直接在客户表上建模服务员工 ID 不是一个好主意 - 回头客怎么办?一个新的ServingEmployeeCustomer 连接表按顺序响起。 加入 CustomerName 也不是一个好主意 - 如果没有自然键,建议生成一个简单的代理键(INT 身份/自动编号,或 Guid 等)

【讨论】:

以上是关于返回组中最高总数的数据的主要内容,如果未能解决你的问题,请参考以下文章

每个文档/总数中哪 10 个词的 TF-IDF 值最高?

无法通过查询从组中获取结果

如何从未嵌套的数据(BigQuery 中的 Google Analytics 数据)返回正确的汇总总数

数据库中count(all 表达式)函数怎麽用啊

查询数据库并根据搜索参数返回每个位置的“总数”

如何使用 SQL 从每个组中获得最高得分球员?