【问题标题】:How to get the top 3 values mysql? Northwind Database如何获得前3个值mysql?罗斯文数据库
【发布时间】:2015-07-01 08:37:08
【问题描述】:

我正在使用示例数据库 Northwind 在 Toad for mySQL 中做一些 SQL 练习。

此查询的目标是获得每个月的前 3 名客户。最高的意思是他们花的钱最多。我能够加入表格并得出每个客户的所有支出,但我无法获得每个月的最高值。

这是我目前的查询:

SELECT EXTRACT(MONTH FROM orders.OrderDate) AS `Month`,
orders.CustomerID,`order details`.OrderID, 
ROUND(SUM((`order details`.UnitPrice * `order details`.Quantity)*(1 - `order details`.Discount)),2) AS Cost
FROM `order details`
LEFT JOIN orders ON orders.OrderID = `order details`.OrderID
RIGHT JOIN customers ON customers.CustomerID = orders.CustomerID
GROUP BY orders.OrderID, orders.CustomerID, `Month`
ORDER BY Month DESC
LIMIT 3;

我觉得我可能需要某种循环来每月递增,但我不知道它的格式,但什么是可行的解决方案?

【问题讨论】:

  • 您的标签/问题标题非常具有误导性。 Northwind 是 Microsoft SQL 服务器的示例数据库,但您询问的是 MySQL,这是完全不同的。您能否编辑您的问题并修复此信息?
  • 我下载了Northwind的MySQL版本,所以我相信我说的还是准确的
  • 现在我很好奇 - 你是从哪里下载的? AFAIK,微软不提供 Northwind DB 的 MySQL 版本。
  • 昨天花了我一个小时搜索。我找到了here。它也可以使用其他不同的 SQL 服务器。
  • 有趣。谢谢。

标签: mysql sql northwind


【解决方案1】:

for month in 6 5 4 ; do mysql -u root database_name -BNe "SELECT '"$month"' AS Month,orders.CustomerID, order_details.OrderID, ROUND(SUM((order_details.UnitPrice * order_details.Quantity)*(1 - order_details.Discount)),2) AS Cost FROM order_details LEFT JOIN orders ON orders.OrderID = order_details.OrderID RIGHT JOIN customers ON customers.CustomerID = orders.CustomerID where EXTRACT(MONTH FROM orders.OrderDate)=$month GROUP BY Month,orders.OrderID, orders.CustomerID ORDER BY Month DESC ,Cost Desc limit 3"; done

【讨论】:

  • 这会给我整体前 3 名,但不会让我每个月都前 3 名。
  • 在 for 循环中,您可以传递要提取数据的所有月份。
  • 不起作用,因为我没有使用外壳。我正在使用蟾蜍编辑器
猜你喜欢
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
  • 2011-01-23
  • 2021-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-12
相关资源
最近更新 更多