添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

转:http://www.seomumu.com/mysql-php?start=56

对于group by在mysql中的使用和Oracle的差异性很大,准确的说不光和Oracle和别的数据库差异性一样,这些有点不太遵循标准SQL。我们知道常规的 sql,对于group by来说一定要结合聚合函数,而且选择的字段除了聚合函数外,还必须在group by中出现,否则报错,但是在mysql中扩展了这样的功能
首先对于不加聚合函数的sql来说,它的功能结合了limit来得出结果,仔细想想的时候有点Oracle分析函数的味道,limit的时候得到的并不是 最大最小的值,而是某一下group by结果集中第一行,也就是刚才说的相当与先group by, 然后在每个group by下面进行limit 1。
其次,刚才还说了常规的group by结合聚合函数的时候,选择的字段除了聚合函数外,必须在group by中存在,但是在mysql中不是这样了,它具有隐含字段的功能,例如:


(root:im-mysql:16:34:45)[test]> select a,b,c,count(*) from test1 group by a,b;
+------+------+------+----------+
| a


| b    | c    | count(*) |
+------+------+------+----------+
|    1 |    1 |    1 |        3 |
|    1 |    2 |    5 |        3 |
+------+------+------+----------+


对于没有选择的字段,上面是c,c的值还是和上面说到的一样,是根据得到的结果集然后根据每个group by 进行limit 1得到的结果。

转:http://www.seomumu.com/mysql-php?start=56对于group by在mysql中的使用和Oracle的差异性很大,准确的说不光和Oracle和别的数据库差异性一样,这些有点不太遵循标准SQL。我们知道常规的 sql,对于group by来说一定要结合聚合函数,而且选择的字段除了聚合函数外,还必须在group by中出现,否则报错,但是在mysql中扩展了 limit 限制条数 select 罗列记录 先根据where 约束条件 将数据从表 载到内存,所以where的条件作用在数据之前,然后根据 字段 进行分组,在内存 形成一张虚拟的表包含 字段 , 如果此时有 聚合 函数 则先执行 聚合 函数 ,并将 聚合 函数 字段 到虚拟的表 ,接着进行having记录筛选,筛选完成后对数据进行去重,排序,限制等操作后进行显示。 补充知识: mysql where条件and的执行顺序从左到 `name` varchar(255) DEFAULT NULL, `tel` varchar(255) DEFAULT NULL, ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 INSERT INTO `my_taobao`.`test... 一:在不使用 聚合 函数 的时候, group by 子句 必须包含所有的列,否则会报错,如下 select name,MON from [测试、] group by name
在使用 group by分组后展示其他 字段 需要 any_value( 字段 名) 例如: select time from student group by time 还想获取其他 字段 信息 如下: select time,any_value(id),any_value(name),any_value(sex),any_value(grade) from student group by time,即可实现对其他 字段 信息的获取. 相信小伙伴写sql语句时,如果用到了 group by分组后,那么其他未分组的 字段 一定会用 聚合 函数 ,不然的话sql就会报错,下面就来看下为什么要这么使用 一、 聚合 函数 是什么? 聚合 函数 :对一组值执行计算并返回单一的值。除 COUNT 以外, 聚合 函数 忽略空值,如果COUNT 函数 的应用对象是一个确定列名,并且该列存在空值,此时COUNT仍会忽略空值。 意思就是说,使用 聚合 函数 时,给它传入多个值,而它把这些值通过计算给你返回唯一的一个。 二、为什么使用了 group by后用需要用 聚合 函数 因为 group b
首先引入语句来源,表结构和数据如下: 需求是:查出员工(personname)在不同店铺(store)的总薪酬(salary),相同店铺输出store,不同店铺输出multi_store。 正确查询语句如下: SELECT personname,(case when count( distinct Store)>1 then 'multi_store' else MAX ( s...
- 没见过 group by没和 聚合 函数 一起使用的 - 不会报错,新版 mysql 默认配置可以这样,如果要像老版之前。可以修改下配置。但是这样查出来的数据没有准确性。因为查询的未分组的列结果是随机的,仔细看解释 - 对,默认隐含分组了,结果看到不对 - 看我发的图,默认给合并了,你做个试验,看结果数据对不...
SELECT SUM(TABLE.A)FROM TABLE 上述SQL不需要使用 Group by 进行分组,因为其 没有非 聚合 字段 ,所以不用 Group by 也可以。 如果是SELECT SUM(TABLE.A),MAX(B),...
今天被问到了一个问题 在 MYSQL 使用 GROUP BY分组时,我们可以select 多个非 聚合 字段 ,但是有些 字段 可能不在 GROUP BY ,这样的SQL查询在SQL SERVER、ORACLE 是不合理的,且会报错,但 mysql 是可以通过, MYSQL 的这种特异性,有时查询出来的结果并不是我们需要的。 下面我们来做一个实验 数据表如下: id   name  tel 1    a    ...
MySQL ,可以使用 DISTINCT 关键字来去除重复的记录。如果要对多个 字段 进行去重,可以在 DISTINCT 后面列出多个 字段 名,用逗号隔开。例如: SELECT DISTINCT field1, field2, field3 FROM table_name; 这样就可以对表 的field1、field2和field3这三个 字段 进行去重操作。如果只想对其 的某些 字段 进行去重,可以只列出需要去重的 字段 名即可。