如何在没有MySql分组的情况下获取字段的最大值

时间:2010-11-22 13:05:41

标签: mysql aggregate

我有一个查询有很多人和订单标准。选择的一个领域是“价格”(元素价格)但我希望(在每一行中)所有选定元素的最大价格。

我尝试在select上包含MAX聚合函数,希望这将返回所需的值,但不过,价格和MAX(价格)返回相同的值。搜索MySql文档我找到了原因:

  

如果你在一个组中使用组功能   不包含GROUP BY的语句   子句,它相当于分组   在所有行上。

有没有办法解决这个问题?

提前致谢!

有一个类似的问题(但没有解决这个问题):find max value without aggregate operator in mysql

3 个答案:

答案 0 :(得分:0)

也许您可以像这样使用存储过程:

CREATE PROCEDURE QueryWithMax ([parameter list if necessary])
BEGIN

    -- Obtain the maximum price
    DECLARE x INT UNSIGNED; -- change datatype if appropriate
    SET x = SELECT
                MAX(price)
            FROM
                ...
            WHERE
                ...
            ;

    -- Now do your query
    SELECT
        price,
        [other columns],
        x AS MaxPrice
    FROM
        ...
    WHERE
        ...
    GROUP BY
        ...
    ;

END

答案 1 :(得分:0)

我没有试过这个,但如果你有一个子查询提取最高价格(所以你得到一行),然后用它进行交叉连接(笛卡尔积)。你应该得到你想要的东西。我不能保证这会有多快。

答案 2 :(得分:0)

你可以这样做:

SELECT
    id,
    price,
    (SELECT MAX(price) FROM your_table) AS max_price
FROM your_table

我不确定你为什么要在每一行都返回该值...我可能会在两个单独的查询中执行此操作,或者使用UNION ALL:

SELECT id, price FROM your_table
UNION ALL
SELECT NULL, MAX(price) FROM your_table