zoukankan      html  css  js  c++  java
  • mysql group by 和 max同时使用出现的问题

    有以下数据表:

    select * from group_by_and_max_demo;
    +----+-----------+-----+-----------+
    | id | name      | age | city      |
    +----+-----------+-----+-----------+
    |  1 | xiaozhang | 20  | beijing   |
    |  2 | xiaoli    | 22  | shanghai  |
    |  3 | xiaowang  | 25  | beijing   |
    |  4 | xiaoliu   | 21  | shanghai  |
    +----+-----------+-----+-----------+

    先要查询每个城市中年龄最大的人的名字和id,使用如下sql:

     SELECT id,`name`,MAX(age),city FROM group_by_and_max_demo GROUP BY city;
    +----+-----------+----------+-----------+
    | id | name      | MAX(age) | city      |
    +----+-----------+----------+-----------+
    |  1 | xiaozhang | 25       | beijing   |
    |  2 | xiaoli    | 22       | shanghai  |
    +----+-----------+----------+-----------+

    查询结果中beijing年龄最大的年龄是25、名字是xiaozhang、id是1,这个明显不对。实际应该是年龄25、名字xiaowang,id是3。也就是说group by后使用max,其他列并不一定是相应的行,而是当前group by分组后相关的第一条记录。

    那应该如何实现这个需求呢?使用如下语句:

    SELECT * FROM group_by_and_max_demo WHERE age IN(SELECT MAX(age) from group_by_and_max_demo GROUP BY city); 
    
    +----+----------+-----+-----------+
    | id | name     | age | city      |
    +----+----------+-----+-----------+
    |  2 | xiaoli   | 22  | shanghai  |
    |  3 | xiaowang | 25  | beijing   |
    +----+----------+-----+-----------+
  • 相关阅读:
    2016年3月iOS面试总结
    iOS常用公共方法
    让你的App说出多国语言——iOS开发之本地化(国际化)
    开发中遇到的坑
    Git简明教程
    iOS-打包成ipa的4种方法
    iOS-最全的App上架教程
    android 开源项目
    android 文件缓存工具类
    android 聊天通讯源码
  • 原文地址:https://www.cnblogs.com/silenceshining/p/15139480.html
Copyright © 2011-2022 走看看