Mysql查询新列每一行的max函数

Posted

技术标签:

【中文标题】Mysql查询新列每一行的max函数【英文标题】:Mysql query max function for each row of a new column 【发布时间】:2020-05-29 22:16:32 【问题描述】:

我想在每一行中创建一个新列,其中包含另一列的最大值,但是当我使用 MAX() 函数时,它只返回一行。

我希望每一行都有相同的值。从没有MAX 函数的第一个代码我得到533 行,然后当我使用MAX() 时我只得到一行。

SELECT
    ap.id,
    ap.name,
    apc.closing_prob_c
FROM a_assigned_prospect ap
LEFT JOIN a_assigned_prospect_cstm apc ON apc.id_c=ap.id
SELECT
    ap.id,
    ap.name,
    apc.closing_prob_c,
    MAX(apc.closing_prob_c)
FROM a_assigned_prospect ap
LEFT JOIN a_assigned_prospect_cstm apc ON apc.id_c=ap.id

【问题讨论】:

所以您希望新列在整个表上具有最大值apc.closing_prob_c,同时仍返回533行? 是的,我想要那个 您应该提供样本数据和期望的结果。 【参考方案1】:

我了解您希望新列在整个结果集上具有最大值apc.closing_prob_c,同时仍返回原始的 533 行。

如果您运行的是 mysql 8.0,那么直接使用最大窗口即可:

select
    ap.id,
    ap.name,
    apc.closing_prob_c,
    max(apc.closing_prob_c) over() max_closing_prob_c
from a_assigned_prospect ap
left join a_assigned_prospect_cstm apc on apc.id_c = ap.id

在早期版本中,您通常会使用子查询:

select
    ap.id,
    ap.name,
    apc.closing_prob_c,
    (
        select max(apc1.closing_prob_c) 
        from a_assigned_prospect_cstm apc1
        where exists (
            select 1 from a_assigned_prospect ap1 where ap1.id = apc1.id_c
        )
    ) max_closing_prob_c
from a_assigned_prospect ap
left join a_assigned_prospect_cstm apc on apc.id_c=ap.id

【讨论】:

欢迎@DanielMejia。如果我的回答正确地回答了您的问题,请点击复选标志accept it...谢谢。

以上是关于Mysql查询新列每一行的max函数的主要内容,如果未能解决你的问题,请参考以下文章

如何为查询mysql添加临时值

mysql 多次分组查询 数据最大的一行

Laravel中的MySQL子查询,如何加入查询并将第二个查询的结果作为新列添加到第一个查询?

mysql中min和max查询优化

MySQL数据操作与查询(第六章 上)

mysql id自动增长 怎么查询最大值