www.91084.com

GVKun编程网logo

MYSQL数据库mysql中limit、order by和group by的用法实例解析

22

想了解MYSQL数据库mysql中limit、orderby和groupby的用法实例解析的新动态吗?本文将为您提供详细的信息,此外,我们还将为您介绍关于mysqlgroupby的用法解析、MySQL

想了解MYSQL数据库mysql中limit、order by和group by的用法实例解析的新动态吗?本文将为您提供详细的信息,此外,我们还将为您介绍关于mysql group by 的用法解析、MySQL group by和order by如何一起使用、Mysql 简单的命令语句续-*,as,group by,order by,group by,havin_MySQL、mysql一个简单查询中的group by和order by的使用_MySQL的新知识。

本文目录一览:

MYSQL数据库mysql中limit、order by和group by的用法实例解析

MYSQL数据库mysql中limit、order by和group by的用法实例解析

《MysqL数据库MysqL中limit、order by和group by的用法实例解析》要点:
本文介绍了MysqL数据库MysqL中limit、order by和group by的用法实例解析,希望对您有用。如果有疑问,可以联系我们。

导读:本节内容:MysqL中limit、order by、group by的用法在MysqL数据库中,limit是分页的一个好工具,例如: select * from table_a where...

MysqL实例本节内容:
MysqL中limit、order by、group by的用法

MysqL实例在MysqL数据库中,例如:
 

select * from table_a where num = 4 limit 1,10,
select * from table_a where num = 4 limit 10,

MysqL实例遇到一个问题:有些数据怎么也不会出来,第一页的数据会重复显示在第二页,有些在数据库的数据不会被查询出来.

MysqL实例使用如下语句:
 

select * from table_a where num = 4 order by num1 ASC limit 1,
select * from table_a where num = 4 order by num1 ASC limit 10,
 

MysqL实例可以解决此问题.

MysqL实例不过问题又来了,开始有group by的问题:
select * from table_a where num = 4 group by num1 order by num1 ASC limit 1,
select * from table_a where num = 4 group by num1 order by num1 ASC limit 10,

MysqL实例这样又会出现数据缺失的问题,此时只有增加排序的字段来处理这个问题.

MysqL实例如下:
 

select * from table_a where num = 4 group by num1 order by num1,num2 ASC limit 1,
select * from table_a where num = 4 group by num1 order by num1,num2 ASC limit 10,

MysqL实例备注:
如此也只是目前解决了这个问题,如果说相同的字段很多,那这个办法也会出现问题.

欢迎参与《MysqL数据库MysqL中limit、order by和group by的用法实例解析》讨论,分享您的想法,小编PHP学院为您提供专业教程。

mysql group by 的用法解析

mysql group by 的用法解析

1. group by的常规用法

group by的常规用法是配合聚合函数,利用分组信息进行统计,常见的是配合max等聚合函数筛选数据后分析,以及配合having进行筛选后过滤。

    • 聚合函数max
    • select max(user_id),grade from user_info group by grade ;
    • 这条sql的含义很明确,将数据按照grade字段分组,查询每组最大的user_id以及当前组内容。注意,这里分组条件是grade,查询的非聚合条件也是grade。这里不产生冲突。

      having
      select max(user_id),grade from user_info group by grade having grade>''A''

      这条sql与上面例子中的基本相同,不过后面跟了having过滤条件。将grade不满足’>A’的过滤掉了。注意,这里分组条件是grade,查询的非聚合条件也是grade。这里不产生冲突。

       

      2. group by的非常规用法

    • select max(user_id),id,grade from user_info group by grade
    • 这条sql的结果就值得讨论了,与上述例子不同的是,查询条件多了id一列。数据按照grade分组后,grade一列是相同的,max(user_id)按照数据进行计算也是唯一的,id一列是如何取值的?看上述的数据结果,
      推论:id是物理内存的第一个匹配项。
      究竟是与不是需要继续探讨。

      修改数据

      • 修改id按照上述数据结果,将id=1,改为id=99,执行sql后结论:
      • 显然,与上述例子的结果不同。第一条数据id变成了99,查出的结果第一条数据的id从1变成了2。表明,id这个非聚合条件字段的取值与数据写入的时间无关,因为id=1的记录是先于id=2存在的,修改的数据不过是修改了这条数据的内容。结合mysql的数据存储理论,由于id是主键,所以数据在检索是是按照主键排序后进行过滤的,因此
        推论:id字段的选取是按照mysql存储的检索数据匹配的第一条。
        将id改为1后恢复了原始结果,无法推翻上述推论。
        更改查询条件

      • select max(user_id),user_id,id,grade from user_info group by grade
      • 将数据user_id改为10999后,执行结果为

      • 结论

        • 当group by 与聚合函数配合使用时,功能为分组后计算
        • 当group by 与having配合使用时,功能为分组后过滤
        • 当group by 与聚合函数,同时非聚合字段同时使用时,非聚合字段的取值是第一个匹配到的字段内容,即id小的条目对应的字段内容。

MySQL group by和order by如何一起使用

MySQL group by和order by如何一起使用

假设有一个表:reward(奖励表),表结构如下:

CREATE TABLE test.reward (
 id int(11) NOT NULL AUTO_INCREMENT,
 uid int(11) NOT NULL COMMENT ''用户uid'',
 money decimal(10, 2) NOT NULL COMMENT ''奖励金额'',
 datatime datetime NOT NULL COMMENT ''时间'',
 PRIMARY KEY (id)
)
ENGINE = INNODB
AUTO_INCREMENT = 1
CHARACTER SET utf8
COLLATE utf8_general_ci
COMMENT = ''奖励表'';

表中数据如下:

现在需要查询每个人领取的最高奖励并且从大到小排序:

如果直接查询:

SELECT id, uid, money, datatime FROM reward GROUP BY uid ORDER BY money DESC;

得到如下结果:

没有得到我们需要的结果,这是因为group by 和 order by 一起使用时,会先使用group by 分组,并取出分组后的第一条数据,所以后面的order by 排序时根据取出来的第一条数据来排序的,但是第一条数据不一定是分组里面的最大数据。

方法一:

既然这样我们可以先排序,在分组,使用子查询。

SELECT
 r.id,
 r.uid,
 r.money,
 r.datatime
FROM (SELECT
  id,
  uid,
  money,
  datatime
 FROM reward
 ORDER BY money DESC) r
GROUP BY r.uid
ORDER BY r.money DESC;

方法二:

如果不需要取得整条记录,则可以使用 max() min()

SELECT id, uid, money, datatime, MAX(money) FROM reward GROUP BY uid ORDER BY MAX(money) DESC;

得到结果:

可能你已经发现了,使用max()取得的记录,money字段和max(money)字段不一致,这是因为这里只是取出了该uid的最大值,但是该最大值对应的整条记录没有取出来。

如果需要取得整条记录,则不能使用这种方法,可以使用子查询。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

您可能感兴趣的文章:
  • mysql中count(), group by, order by使用详解
  • 深度分析mysql GROUP BY 与 ORDER BY
  • mysql中order by与group by的区别
  • 深入解析mysql中order by与group by的顺序问题
  • Mysql中order by、group by、having的区别深入分析
  • mysql分组取每组前几条记录(排名) 附group by与order by的研究
  • mysql "group by"与"order by"的研究--分类中最新的内容
  • MySQL order by与group by查询优化实现详解

Mysql 简单的命令语句续-*,as,group by,order by,group by,havin_MySQL

Mysql 简单的命令语句续-*,as,group by,order by,group by,havin_MySQL

大哭-菜鸟在努力的学飞翔!

作为一枚菜鸟不容易啊,这个世界好难生存啊

继续在简陋的cmd命令里面敲击着sql命令!


首先这里着重的说下通配符*的问题!


如果让大家搜索全部的话 肯定是想也不想直接一个 select * from tablename 吧!

但是 这样的话是非常影响性能的!

如果你的列有很多的话!

因为在数据库里面

每次select * 都要把 * 解析成各个属性,所以当在实际开发当中千万不要偷懒

要列出自己要搜索的所有属性!从而提高整体的效率

for example:

select id,name,gender,age,job,createdate from teacher_tab order by createdate desc;
登录后复制


order by  列名  desc  是按照XXX排序 ,降序

order by  列名   不加,升序

效果如图1:


当你排列顺序遇到好多相等的时候,就可以考虑有第二列来排列

比如

select id,name,gender,age,job,createdate from teacher_tab order by createdate desc,age;
登录后复制
效果如图2  是两种排序方式



接下去我们怎么进行分组:

比如说我们要统计老师的数目,然后对老师性别分别进行统计 g=gg=男  m = mm = 女

代码如下“:

select gender ,count(gender) from teacher_tab group by gender;
登录后复制

效果如图3:


假如说我们只要计算m的个数,我们可以加having gender = ''m'';

如图4:



不过不建议用having 当数据庞大之后,我们要在分组后,又进行搜索话是极耗费性能的。

建议使用如下代码:

select gender,count(gender) from teacher_tab where gender = ''m'';
登录后复制

有时候我们对列名不太满意,想自定义使用其他的名字,这时候就需要用到as 别名了


代码如下:

select t.age,t.name from teacher_tab t;
登录后复制
select count(id) as counts from teacher_tab;
登录后复制
我们可以给列取别名也可以给表取别名!

效果如图5:


还有使用limit 限制 limit 起始量,偏移量

for example :

select * from teacher_tab limit 0,3;
登录后复制
select * from teacher_tab limit 1,3;
登录后复制
0是从第一条开始

1是指第二条开始

3是指0后面三条记录

效果如图6:


接下去是

事物的提交 回归等,下一篇再续


mysql一个简单查询中的group by和order by的使用_MySQL

mysql一个简单查询中的group by和order by的使用_MySQL

bitsCN.com 具体我忘记了,大概内容差不多如下。两张表,内容如下:Sql代码  +--------+-------+------+  | z_code | mgr   | pigs |  +--------+-------+------+  | 021    | zhang | 85   |  | 010    | wang  | 70   |  +--------+-------+------+  2 rows in set  查询最终结果  Sql代码  +--------+------+-------+  | z_code | city | mgr   |  +--------+------+-------+  | 010    | BJ   | wang  |  | 021    | HB   | zhang |  +--------+------+-------+  2 rows in set  A表  Sql代码  +------+-------+------+  | part | mgr   | pigs |  +------+-------+------+  | 001  | wang  |   20 |  | 002  | wang  |   50 |  | 011  | zhang |   49 |  | 012  | zhang |   36 |  +------+-------+------+  4 rows in set   B表 所用查询语句为:Sql代码  select z_code, A.mgr mgr, sum(pigs) pigs from A, B where A.mgr = B.mgr group by A.mgr order by pigs desc;    下面是建表和插入语句的SQL:Sql代码  create database pig_store;  use pig_store;    create table A(      z_code varchar(8),      city varchar(4),      mgr varchar(16)  );  create table B(      part varchar(8),      mgr varchar(16),      pigs int(5)  );    insert into A values ( ''010'', ''BJ'', ''wang''), ( ''021'', ''HB'', ''zhang'' );  insert into B values ( ''001'', ''wang'', 20 ), ( ''002'', ''wang'', 50 ), ( ''011'', ''zhang'', 49 ), ( ''012'', ''zhang'', 36 );     作者 wangtingbang bitsCN.com

我们今天的关于MYSQL数据库mysql中limit、order by和group by的用法实例解析的分享已经告一段落,感谢您的关注,如果您想了解更多关于mysql group by 的用法解析、MySQL group by和order by如何一起使用、Mysql 简单的命令语句续-*,as,group by,order by,group by,havin_MySQL、mysql一个简单查询中的group by和order by的使用_MySQL的相关信息,请在本站查询。

本文标签: