【问题标题】:MySql: Returning MAX Value in joined tablesMySql:在连接表中返回 MAX 值
【发布时间】:2014-04-26 16:54:18
【问题描述】:

我在这里加入了 3 张桌子。有客户订购的客户、订单和商品。它们被命名为:CustomersTbl、OrdersTbl、OrderedItemTbl。

我正在排列所有订单及其总价,并显示下订单的客户的姓名。

select * from productstbl;
select * from ordereditemtbl;
select * from orderstbl;

select 
    ordereditemtbl.ItemID,
    customerstbl.CustomerID,
    customerstbl.FirstName,
    orderstbl.OrderID,
    orderstbl.OrderDate,
    sum(ordereditemtbl.amount * productstbl.Price) as totalPrice
from
    ordereditemtbl
        inner join
    ProductsTbl ON ordereditemtbl.productID = productstbl.productID
        inner join
    orderstbl ON ordereditemtbl.orderID = ordereditemtbl.orderID
        inner join
    customerstbl ON customerstbl.customerID = orderstbl.customerID#'2'
group by ordereditemTbl.OrderID
order by totalPrice desc;

现在我想单独显示 TotalPrice 最高的订单。我怎样才能得到它的最大值?有没有办法可能使用 MAX() 函数?

【问题讨论】:

  • order by MAX(totalPrice)
  • 不。可悲的是,我得到以下信息:“错误 1247:不支持参考 totalPrice”。我尝试通过输入 totalPrice 的值来修复它:sum(ordereditemtbl.amount * productstbl.Price)。让我遇到错误 1111:“无效使用组功能”。
  • ... order by totalPrice desc LIMIT 1 请参阅docs。另请注意,您在orderstbl ON ordereditemtbl.orderID = ordereditemtbl.orderID 行中有错误,我猜您的意思是orderstbl ON ordereditemtbl.orderID = erderstbl.orderID

标签: mysql sql join max


【解决方案1】:

让我们看看。看看这是否有效:

SELECT * FROM 
(
select 
    ordereditemtbl.ItemID,
    customerstbl.CustomerID,
    customerstbl.FirstName,
    orderstbl.OrderID,
    orderstbl.OrderDate,
    sum(ordereditemtbl.amount * productstbl.Price) as totalPrice,
    @rownum AS row_number
from
    ordereditemtbl
        inner join
    ProductsTbl ON ordereditemtbl.productID = productstbl.productID
        inner join
    orderstbl ON ordereditemtbl.orderID = ordereditemtbl.orderID
        inner join
    customerstbl ON customerstbl.customerID = orderstbl.customerID#'2'
        inner join
    (SELECT @rownum := 0) dummy
group by ordereditemTbl.OrderID
ORDER BY totalPrice desc;
)
WHERE row_number=0

这会分配一个行号并选择顶行。

干杯, 拉姆

【讨论】:

  • 好吧,我们缺少每个表的别名,但在我添加之后,我得到了 0 行返回。
  • 我不明白,我复制了你的查询,我应该添加别名吗?
  • 我是真正的SQL初学者,我只是通过错误学习这些东西。
【解决方案2】:

按照 abl 的建议,我在代码末尾添加了以下内容:

order by totalPrice desc LIMIT 1;

显示创建的表的第一行,以降序显示。 谢谢!

【讨论】:

    猜你喜欢
    • 2011-07-22
    • 2017-06-15
    • 2013-02-18
    • 2021-03-25
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多