精华内容
下载资源
问答
  • SQL: selectgroup by的字段

    万次阅读 多人点赞 2018-07-02 08:24:00
    在含有Group by子句的查询语句中,对select关键字后的目标列是否可总结出一些规律group by 后面的字段列表, 就是按照这些字段分类汇总因此select后面的字段列表, 除了上面的字段外,其余字段必须是聚集表达式....

    使用group by查找或删除重复行,请参考

    在含有Group by子句的查询语句中,对select关键字后的目标列,存在以下规律

    1. 使用group by 时,select 涉及的列要么是参与分组的列,要么列包含在聚合函数中
    2. where将对分组前的所有数据进行筛选。having将对分组后的一组数据搞事情。

    例如:

    select a,b,avg(c),sum(d) from 表 group by a,b

    select非group by的字段

    • 可以把group by的结果集当作一个表,然后从这里表里取数就可以了
    • 例如:查询,订单表中订单号重复的订单信息,分组字段是orderno,select的信息不仅有orderno,还有其他信息
    SELECT
    	p.id,
    	p.orgcode,
    	p.idserial,
    	p.username,
    	p.orderno,
    	p.createtime,
    	p.payflag,
    	p.businessorderno,
    	p.paytime
    FROM
    	pay_order_trade p,
    	(
    		SELECT
    			orderno,
    			count(*) 重复次数
    		FROM
    			pay_order_trade
    		GROUP BY
    			orderno
    		HAVING
    			count(1) > 1
    	) s
    WHERE
    	s.orderno = p.orderno
    ORDER BY
    	p.orderno DESC;
    展开全文
  • group byselect的使用

    万次阅读 多人点赞 2018-07-05 18:34:53
    GROUP BY的用法1、group by概述:简单来说:将数据库的...2、group by的语法:SELECT column_name, function(column_name) //此处的function()函数是指SQL中的一些聚合函数,例如:MAX(),MIN(),SUM(),AVG(),COUNT(...

    GROUP BY的用法

    1、group by概述:

        简单来说:将数据库的数据用'by'后面接的规则进行分组,即将一个大数据库分成一个个相同类型数据在一起的小区域。

    2、group by的语法:

    SELECT column_name, function(column_name)  //此处的function()函数是指SQL中的一些聚合函数,例如:MAX(),MIN(),SUM(),AVG(),COUNT()等等
    FROM table_name
    WHERE column_name operator value    //where条件语句
    GROUP BY column_name;    //以某一列分组

    3、group by实例操作:

    • 原表:在此处就叫做call_task表吧


    • group by正确的进入方法:
    SELECT is_pause,pause_type,count(stu_id)
    FROM call_task
    WHERE is_pause='1'
    GROUP BY is_pause,pause_type

        语句整个的意思就是从call_task这个表中,先筛选出满足is_pause='1'这个条件的所有数据,然后又对这些数据按照is_pause和pause_type这两个字段分组,最后将is_pause、pause_type和学生总人数展示在结果集中。(这个过程就是一个将原数据库按照条件不断筛选最后得到我们需要的一个小的数据库的过程。这里面又会牵扯到一个sql语句执行顺序的问题,详细情况请看SQL执行顺序和SQL别名问题)。

        上面的语句执行之后得到的结果数据集如下图所示:


    • group by错误的打开方式:

    SELECT is_pause,user_id,pause_type,count(stu_id)
    FROM call_task
    WHERE is_pause='1'
    GROUP BY is_pause,pause_type    //在分组中并没有user_id这个字段

        我们先看结果再来分析原因:


        大家可以对比原数据库数据,很快会发现虽然pause_type和学生总数这两栏数据没有问题,但是user_id那一栏显示明显不对。为什么会出现这种情况呢???因为我们在分组的时候只把is_pause和pause_type这两个字段当做分组条件,所以SQL只会对原数据库中的这两列的数据进行分组操作,其他列并不会参与到这个分组过程中(注意!!),但是在显示结果集时你非要让它显示没有进行分组操作的列,当然数据库就会出现错误了啦。其实数据库在这里也是很纠结的,因为user_id存在多个情况,它也不知道要显示哪个user_id,最后它采取的方式是选取满足where和分组条件时出现的第一组数据的user_id。

    4、group by和select的一些总结:

    • 如果在有group by操作中,select后面接的结果集字段只有两种:要么就只有group by后出现的字段,要么就是group by后出现的字段+聚合函数的组合(常用的五种聚合函数:min()求列中最小数值,max()求列中最大数值,avg()求平均值,sum()求列中字段对应数值的总和,count()求列的总条数)
    • 其实分组的思想很简单:就拿上面例子来说,把分组条件想成一个二维数组,满足这个数组就将个数加1。(is_pause,pause_type)就是一个简单的二维数组,结合筛选条件和数据库中的数据来看,(is_pause,pause_type)就分成下面三种情况:(1,2),(1,4),(1,5),遇到满足数组情况的count(stu_id)数值加1。同理,如果你的分组条件是3个,4个或者更多,就按照这个思路想,也不会晕菜。


    展开全文
  • MySQL5.7.5后only_full_group_by成为sql_mode的默认选项之一,这可能导致一些sql语句失效。 比如在使用group by进行分组查询报错 1 查看自己的sql_mode配置: 在sql命令行中输入select @@sql_mode;这时我们能够看到...

    MySQL5.7.5后only_full_group_by成为sql_mode的默认选项之一,这可能导致一些sql语句失效。
    比如在使用group by进行分组查询报错

    1 查看自己的sql_mode配置:
    		在sql命令行中输入select @@sql_mode;这时我们能够看到自己的sql_mode配置,其中如果有ONLY_FULL_GROUP_BY,那它就是group by查询报错的罪魁祸首了
    
    2 解决办法:

    命令行打开mysql.cnf,默认路径为/etc/mysql/conf.d/mysql.cnf,如果找不到可以使用whereis进行查询

    sudo vim /etc/mysql/conf.d/mysql.cnf
    

    滚动到文件底部复制并粘贴

    [mysqld]
    sql_mode = 'STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO,      NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION'
    

    保存退出重启mysql

    sudo service mysql restart
    

    为什么5.7.5版本之后默认设置ONLY_FULL_GROUP_BY限制呢?
    对于上述的报错信息,我的理解是select字段里包含了没有被group by条件唯一确定的字段fields。
    假如一个表内有多个国家,比如

    namecountry
    张三魏国
    李四魏国
    王五蜀国
    霸道蜀国
    橘子蜀国
    蛋糕吴国

    我们想要查询有多少国家,分别为…
    可以

    select country from 表名 group by country;
    

    但是如果说我们这样

    select name,country from 表名 group by country;
    

    因为执行group_by语句实际上把同一组内多行纪录合并成一行,同一个国家name并不相同,搜索引擎不知道该返回哪一条,所以认为这样的sql是武断的(arbitrary).

    解决办法就是上面的解决办法,但是还要提醒朋友们,若非必要还是不要去掉,出现错误最大可能是sql语句本身存在问题.

    展开全文
  • 基本共识:进行groupby时,groupby中的字段可以不出现在select中,但是select中只能有groupby中的字段和函数. 但如下示例sql,依然能正常执行: 数据表: 执行如下sql,发现能正常执行,而且groupby后默认取每组第一条...

    基本共识:进行groupby时,groupby中的字段可以不出现在select中,但是select中只能有groupby中的字段和函数.

    但如下示例sql,依然能正常执行:

    数据表:

    执行如下sql,发现能正常执行,而且groupby后默认取每组第一条数据

    select * from user_info group by grade;

    结果:

    经查找资料,分析,与MySql数据库中sql_mode是否含有only_full_group_by有关.如果无only_full_group_by,则groupby不受上面的认知限制,否则,必须按上面的共识操作.

    1、查看sql_mode

    select @@sql_mode;

    本地库:NO_ENGINE_SUBSTITUTION

    其他库:

    ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

    2、去掉ONLY_FULL_GROUP_BY,重新设置值

    set @@sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER
    ,NO_ENGINE_SUBSTITUTION';

    3、上面是改变了全局sql_mode,对于新建的数据库有效。对于已存在的数据库,则需要在对应的数据下执行

    set sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

     

    展开全文
  • oracle selectgroup by的字段

    千次阅读 2017-11-03 15:46:41
    可以把group by的结果集当作一个表,然后从这里表里取数就可以了。 e.g. SELECT A.PROJECT_CODE,A.DIE_NO,E.ONE_CONSUMING FROM (SELECT T.PROJECT_CODE, T.DIE_NO, SUM(T.OFFLINE_QTY) OFFQTY FROM DATA_PLAN T ...
  • 报错 SELECT list is not in GROUP BY clause

    千次阅读 2019-08-17 19:06:20
    [Err] 1055 - Expression #10 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'xxx' which is not functionally dependent on columns in GROUP BY clause; this is incompatible wit...
  • sql语句select group by order by where一般先后顺序

    万次阅读 多人点赞 2018-06-21 19:55:20
    写的顺序:select ... from... where.... group by... having... order by..执行顺序:from... where...group by... having.... select ... order by...
  • sql篇 select from where group by having order by

    千次阅读 热门讨论 2016-08-12 15:58:24
    以前,自己总是记不住如何用group by,如何用order by,什么时候用group by,什么时候用order by,什么时候两者一起用,怎么用,谁先谁后,现在,我们就一起来说一下Select from where groupby having order by ...
  • mysql 中group byselect 列字段数不同

    千次阅读 2016-07-31 22:38:37
    mysql> select count(1),task_type,status from action where biz_date='20141014' group by status; +----------+-----------+--------+ | count(1) | task_type | status | +----------+-----------+-
  • 使用了group by 后,要求Select出的结果字段都是可汇总的,否则就会出错。 比如,有:{学号,姓名,性别,年龄,成绩}字段 这样写: SELECT 学号,姓名,性别,年龄,sum(成绩) FROM 学生表 GROUP BY 学号 就是...
  • 一般情况下,select查询的字段,如果用group by 分组查询的话,必须把select后面的字段全部分组,解决这问题需要我们自己配置来解决 举例: select `id`,`name` from `user` group by `id` 这样的查询会显示1064 ...
  • 先解决第一个问题: 性别 姓名 职业 ...语法要求,Group By本来就是根据某个...但其他字段的数据是不一样的,在分组后sqlserver无法将它们合并,所以当然不能select 任何group by之外的字段 比如 我们要group b...
  • mysql select字段别名 不可以在select 或者where中使用 但是group by 与order by可以使用
  • 查询语句中select from where group by having order by的执行顺序 一、基本顺序 1.查询中用到的关键词主要包含六个,并且他们的顺序依次为  select--from--where--group by--having--order by  ...
  • sql语句select之分组查询(group by

    千次阅读 2021-04-21 09:12:07
    sql语句select之分组查询(group by) 分组查询 语法: select 分组函数,列(要求出现在group by的后面) from 表 where 筛选条件 group by 分组的列表 order by 子句 注意:查询列表比较特殊,要求是分组函数和...
  • 查询语句中select from where group by having order by的执行顺序 1.查询中用到的关键词主要包含六个,并且他们的顺序依次为 select–from–where–group by–having–order by 其中select和from是必须的,其.....
  • C#——Linq的使用Where、GroupBySelect

    千次阅读 2019-10-20 17:41:44
    List<Model>.Where(c => c.Djzt == 4 && c.Zfbz == 0) .GroupBy(c => new { c.Cjsj_Date, c.Flmc}) .Select( ...
  • 原文:...select>from>where>group by>having>order by 其中select和from是必须的,其他关键词是可选的,这六个关键词的执行顺序与sql语句的书写顺序并不是一样的,而是按照下面的顺序来执行: f
  • -- 语法: 1 2 3 4 5 6 7 SELECT select_list  FROM table_name  [ WHERE search_condition ]  [ GROUP BY group_by_expression ]  [ HAVING sear
  • mysql 中group byselect 列字段数不同 首先,这个是MySQL对标准sql的扩展 这在mysql 中是合法的。在ORACLE中会报错。 这是mysql的设计,当group by 字段和select 多字段是唯一的一个分组时,这样能提高效率...
  • Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘t.content’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with s...
  • 1.select 语句的语法顺序(数字为执行顺序) ... 3.group by [列] 4. having [筛选条件] 6.order by [列] 注: order by可以跟列的别名,其他子句不可以,是因为在第五步才给列起了别名,所以其...
  • group by详解

    万次阅读 多人点赞 2018-09-16 22:06:51
    一. 概述 group_by的意思是根据by对数据按照哪个字段进行分组,或者是哪几个...select 字段 from 表名 where 条件 group by 字段 或者 select 字段 from 表名 group by 字段 having 过滤条件 注意:对于过滤条...
  • select name from student group by classid; 会出现下列错误 mysql5.7默认group by 只能配合聚合函数使用如max,count(*),等 这样是没问题的 因为MySQL 5.7.5和up实现了对功能依赖的检测。如果启用了only_...
  • select、from、where、group by、having、order by、limit组合用法 一、关键词意义 【1】select用来指定查询哪些列,可以使用聚合函数。 【2】from用来指定查询哪张表。 【3】where用来指定过滤条件,针对原表,...
  • select *,count(distinct fittings_list_code...group by fittings_list_code 数据库查询操作大致如上(别问我为啥能写出来这么逗的数据库查询语句,反正就想对fittings_list_code这个字段去下重,用distinct+group...
  • on > where > Group by > having > select > DISTINCT > order by > TOP (8)SELECT (9)DISTINCT (11) (1)FROM [left_table] (3) JOIN (2)ON (4)WHERE (5)GROUP BY (6)WITH (7)HAVIN

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 511,776
精华内容 204,710
关键字:

bygroupselect