MySQL中Group By,distinct使用注意事项
mysql> select * from test; +----+-------+------+-------+ | id | name | age | class | +----+-------+------+-------+ | 1 | qiu | 22 | 1 | | 2 | liu | 42 | 1 | | 4 | zheng | 20 | 2 | | 3 | qian | 20 | 2 | | 0 | wang | 11 | 3 | | 6 | li | 33 | 3 | +----+-------+------+-------+ 6 rows in set (0.00 sec)
如果想找到每个class里面的最大的age,则需要使用group by和max。
如下的sql语句,则输出结果有错误:
mysql> select id,name,max(age),class from test group by class; +----+-------+----------+-------+ | id | name | max(age) | class | +----+-------+----------+-------+ | 1 | qiu | 42 | 1 | | 4 | zheng | 20 | 2 | | 0 | wang | 33 | 3 | +----+-------+----------+-------+ 3 rows in set (0.00 sec)
虽然找到的age是最大的age,但是与之匹配的用户信息却不是真实的信息,而是group by分组后的第一条记录的基本信息。
如果我使用以下的语句进行查找,则可以返回真实的结果。
mysql> select * from ( -> select * from test order by age desc) as b -> group by class; +----+-------+------+-------+ | id | name | age | class | +----+-------+------+-------+ | 2 | liu | 42 | 1 | | 4 | zheng | 20 | 2 | | 6 | li | 33 | 3 | +----+-------+------+-------+ 3 rows in set (0.00 sec)
distinct本来就是针对 “多列”的,如果想让单个列“distinct”,用group by
mysql> select a,b from abc;+------+------+| a | b |+------+------+| 7 | 9 || 7 | 1 || 7 | 1 |+------+------+3 rows in set (0.00 sec) mysql> select distinct a,b from abc;+------+------+| a | b |+------+------+| 7 | 9 || 7 | 1 |+------+------+2 rows in set (0.00 sec) mysql> select a, max(b) from abc group by a;+------+--------+| a | max(b) |+------+--------+| 7 | 9 |+------+--------+1 row in set (0.01 sec)
MySQL中Group By,distinct使用注意事项的更多相关文章
- 转:深入研究mysql中group by与order by取分类最新时间内容
鉴于项目的需要,就从网上找到该文章,文章分析得很详细也很易懂,在android里, (不知道是不是现在水平的限制,总之我还没找到在用ContentProvider时可以使用子查询),主要方法是用SQL ...
- 深入研究mysql中group by与order by取分类最新时间内容
鉴于项目的需要,就从网上找到该文章,文章分析得很详细也很易懂,在android里,(不知道是不是现在水平的限制,总之我还没找到在用 ContentProvider时可以使用子查询),主要方法是用SQL ...
- MYSQL中GROUP BY不包含所有的非聚合字段时的注意事项
本文导读:在MYSQL中使用GROUP BY分组时,我们可以select 多个非聚合字段,但是这些字段不在GROUP BY中,这样的SQL查询在SQL SERVER.ORACLE中是不合理的,且会报错 ...
- MySQL中group by , sum , case when then 的使用
在我们使用数据库的时候,可能会遇到需要进行统计的情况. 比如需要统计一下,下表中各个年份的胜负场数. 遇到这样的情况,我们应该怎么办呢? 在mysql中我们可以使用group by sum case ...
- 在MySQL中group by 是什么意思
mysql语法中group by是什么意思? 在百度中搜索半天,最后找到一篇解释比较好的(不是博文,是百度知道,很郁闷那么多网友怎么就没人解释的清楚),链接如下: http://zhidao.baid ...
- mysql中group by 的用法解析
1. group by的常规用法 group by的常规用法是配合聚合函数,利用分组信息进行统计,常见的是配合max等聚合函数筛选数据后分析,以及配合having进行筛选后过滤. 假设现有数据库表如下 ...
- mysql中group by和order by混用 结果不是理想结果(转)
文章转自 https://www.cnblogs.com/myphper/p/3767572.html 在使用mysql排序的时候会想到按照降序分组来获得一组数据,而使用order by往往得到的不是 ...
- MYSQL中GROUP BY的细节及SELECT语句顺序
一.GROUP BY语句的细节 我们知道,在sql中,GROUP BY语句主要用来给数据分组,以便能对每个组进行聚集计算,但是GROUP BY也有一些限制需要知道: 1. GROUP BY字句可以包含 ...
- Mysql中Group By使用Having语句配合查询(where和having区别)
注意 : having语句一般结合GROUP BY一起使用的..... Having短语与WHERE的区别!!! WHERE子句作用于基表或视图,从中选择满足条件的元组.HAVING短语作用于组,从中 ...
随机推荐
- 日历控件修改的JS代码
var bMoveable=true; var _VersionInfo=" " ; //============================================= ...
- spring 常见错误
1. 数据库字段和实体字段不匹配,尤其是数据表字段和实体字段的类型不匹配 2. 数据表中日期字段不能为空(sql语句用了聚合函数min或者max),此时数据表中没有数据就会报此类错误.
- Windows Phone 8.1 Page transitions
original: http://www.visuallylocated.com/post/2014/06/24/Page-transitions-and-animations-in-Windows- ...
- linode空间lamp环境的搭建
安装LAMP的命令如下,请依次执行: apt-get updateapt-get upgrade –show-upgradedapt-get install apache2a2enmod rewrit ...
- D - 排列
#include<cstdio> #include<algorithm> #include<string.h> using namespace std; #defi ...
- 帝国cms 灵动标签
[e:loop={栏目ID/专题ID,显示条数,操作类型,只显示有标题图片,附加SQL条件,显示排序}] <a href="<?=$bqsr[titleurl]?>&quo ...
- linux死锁检测的一种思路
前言: 上一篇博文讲述了pstack的使用和原理. 和jstack一样, pstack能获取进程的线程堆栈快照, 方便检验和性能评估. 但jstack功能更加的强大, 它能对潜在的死锁予以提示, 而p ...
- codevs 1299 线段树 区间更新查询
1299 切水果 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 查看运行结果 题目描述 Description 简单的说,一共N个水果排成 ...
- openjudge 大师兄,师傅被妖怪抓走啦
描述 孙悟空听到沙僧大喊一句:“大师兄,师傅被妖怪抓走啦!”于是孙悟空直追白骨精而去.孙悟空在一条长度为L的森林小路上飞奔,上面有L+1个整点,依次为0,1,2……L.白骨精会使用一种大范围的攻击法术 ...
- c 深度剖析 3
1 typedef 和 define 的区别 #define是简单的替换; typedef是别名! 1 2 #define pchar char * pchar a,b;//展开后 char * ...