【问题标题】:MySQL - Get a Max value from Column, then store in variableMySQL - 从列中获取最大值,然后存储在变量中
【发布时间】:2016-08-03 21:28:39
【问题描述】:

我正在尝试获取一个人的最大 ID 号,将其加一,然后存储在一个变量中。在我将变量初始化为 0 之前,我一直得到 NULL。现在我得到的只是 0。你能帮帮我吗?

--Initialize @Var (probably unnecessary)
SET @Var = 0;

-- Increment Max Value by 1, store in @Var
Select @Var = (MAX(Person_ID) + 1) From Person;

--prints out the value 0????
Select @Var 

【问题讨论】:

    标签: mysql sql variables max wamp


    【解决方案1】:

    我想在@Gordon Linoff 的回答中补充一点,如果您通过按 person_id 排序并选择第一条记录来检索最新的 ID,性能会更好:

    Select top 1 person_id from person order by person_id DESC
    

    【讨论】:

    • 我很欣赏你的想法 - 但你有多大把握订购一张桌子会比找到最大值更快?我的意思是,不管我知道最大值总是在底部,程序都会做一个线性搜索来找到那个最大值。我只是想知道线性搜索和排序是否不会产生相同的性能?订购必须从字面上交换所有记录,除了非常中间的记录?这有点修辞,但如果你能回答,我会很感激你的知识。
    • MAX 是一个分组功能,您需要分组(您没有这样做)。当我们谈论一个包含数千条记录的表时,MAX 和 ordering by 之间的区别更加明显。您拥有的记录越多,分组并找到 MAX 值所需的时间就越长。
    • 啊,我明白了。现在这很有意义。我想知道那些“分组”错误是关于哈哈
    【解决方案2】:

    MySQL 在SELECT 中使用:= 来设置值。所以用这个:

    Select @Var := (MAX(Person_ID) + 1) From Person;
    

    = 的使用仅用于布尔表达式。所以SELECT(带有=)将返回真/假(1/0),但不分配任何值。

    【讨论】:

    • 工作就像一个魅力。我真的很感激,尽管这是一个简单的要求。
    猜你喜欢
    • 2018-08-05
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 2021-06-02
    • 2013-05-16
    • 2012-08-13
    相关资源
    最近更新 更多