zoukankan      html  css  js  c++  java
  • [数据库]关于MAX()函数的一个坑

    之前写了这么一条sql语句,目的是取出表中itemid最大的那一条数据。

    SELECT date, MAX(itemid) AS itemid, group FROM mytable
    GROUP BY group

    但是返回来的数据有点出乎意料。

    问题是:

    date的值并不对应max(itemid)所在行数的值。

    比如2016-02-02取到最大的itemid,但是返回来的值确实表中的第一条数据的date值,即2016-01-01。

    具体原因跟数据库和max函数的机理有关。

    据说是mysql的于处理器做了优化,将max函数计算出来的值,使用一个常数值代替。

    这样的话,相当于我们执行的是:select date, 1234, group from mytable.

    所以数据库返回了第一个撞到的值。

    翻了下官方的reference,发现查max记录的语句全都是用的subquery,类似如下:

    SELECT article, dealer, price
    FROM shop s1
    WHERE price=(SELECT MAX(s2.price)
     FROM shop s2
     WHERE s1.article = s2.article);

    搜了网上关于max函数的教程中,全都没有提到这一点。

    坑略大....

  • 相关阅读:
    mysql基础(三)
    mysql基础(二)
    Mysql基础(一)
    Less32-Less-33
    Less-27
    Less-26
    Less-25
    Less-23
    Less18-Less19
    Less13-Less-14
  • 原文地址:https://www.cnblogs.com/oDoraemon/p/5439196.html
Copyright © 2011-2022 走看看