【问题标题】:Mysql return record with mistakes - agregation function MAX()Mysql返回错误记录——聚合函数MAX()
【发布时间】:2018-05-21 15:55:54
【问题描述】:

mysql Ver 14.14 Distrib 5.5.60,适用于使用 readline 6.3 的 debian-linux-gnu (x86_64)

我有一个表“mytable”,有 12500 条记录和这个字段

  • mytable_id(PRI, auto_increment)
  • x_id(整数)
  • y_id(整数)
  • fieldX(varchar)
  • fieldY(varchar)。

执行咨询时:

select max(x_id), y_id, fieldX, fieldY 
from mytable;

并返回例如

x_id  | y_id | fieldX | fieldY
12121 | 111  | textX  | testY

但是当执行时:

select  y_id, fieldX, fieldY 
from mytable 
where x_id = 12121;

返回

y_id | fieldX | fieldY
232  | textX  | textY

y_id 不匹配。

为什么?

【问题讨论】:

    标签: mysql linux


    【解决方案1】:

    如果你想要最后一行,你应该这样做

     SELECT *
     FROM mytable
     ORDER BY x_id DESC
     LIMIT 1
    

    您的查询的问题是您从一个字段中选择 MAX 值,但另一个是随机值,与该 Max Value 所在的行无关。

    【讨论】:

      【解决方案2】:

      在不使用group by的情况下使用聚合函数会对未参与聚合函数且未在group by中提及的列产生不可预测的结果..

      你可以使用或聚合函数或排序

        select max(x_id), max(y_id), max(fieldX), max(fieldY) 
        from mytable;
      
        select max(x_id), y_id, fieldX, fieldY 
        from mytable
        group by y_id, fieldX, fieldY ;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-02
        • 1970-01-01
        • 2021-02-03
        • 1970-01-01
        • 2021-06-06
        • 1970-01-01
        • 2020-01-09
        • 2012-08-25
        相关资源
        最近更新 更多