精华内容
下载资源
问答
  • mysql 两表关联查询 group by having

    千次阅读 2019-03-11 14:43:59
    已有的数据库字段和数据 ...关联表的字段和数据: b bid aid deptname 1 1 国土局 2 2 水利局 3 3 经信局 4 1 规划节点一 5 1 规划节点二 6 2 规划节点一 7 2 规划节点二 8...

    已有的数据库字段和数据

    主表字段和数据: a表

    aidnamecreator
    1测试一张三
    2测试二李四
    3测试三王五

    关联表的字段和数据: b表

    bidaiddeptname
    11国土局
    22水利局
    33经信局
    41规划节点一
    51规划节点二
    62规划节点一
    72规划节点二
    82规划节点三

    问题描述

    1.查询主表有哪些数据国土环节已办结,哪些数据在国土环节未办结?

    2.查询主表有哪些数据规划环节已办结(只有当规划节点一二三都完成后才算办结),哪些数据在规划环节未办结?

    sql语句

    sql拆分 一步步来
    1.首先查询关联表

    select aid from b where deptname = '国土局'
    

    在这里插入图片描述

    select aid from b where deptname LIKE '%规划环节%' group by aid HAVING COUNT(0) >=3
    

    模糊查询、根据aid分组、再根据count过滤
    在这里插入图片描述
    2.关联查询
    查询已办结:

    SELECT 
    	 distinct a.aid,
    	 a.name,
    	 a.creator
    FROM 
    	a a ,b b 
    where a.aid  in (select aid from b where deptname = '国土局' )  
    

    查询结果

    aidnamecreator
    1测试一张三
    SELECT 
    	 distinct a.aid,
    	 a.name,
    	 a.creator
    FROM 
    	a a ,b b 
    where a.aid  in 
    (select aid from b where deptname LIKE '%规划环节%' group by aid HAVING COUNT(0) >=3 )  
    

    查询结果

    aidnamecreator
    2测试二李四

    未办结 则是 not in

    展开全文
  • 的唯一查询用:distinct多的唯一查询用:group bydistinct 查询多时,left join 还有效,全连接无效,在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余...
  • Oracle group by多字段关联查询

    千次阅读 2021-01-20 09:13:41
    在使用group by 时,有一个规则需要遵守,即出现在select列表中的字段,如果没有在组函数中,那么必须出现在group by 子句中。(select中的字段不可以单独出现,必须出现在group语句中或者在组函数中。) 让我一愣的...

    我今天 用oracle 连表统计查询数据 但是一直报错
    ORA-00979: not a GROUP BY expression
    百度搜索这个错误 ,全部都是

    在使用group by 时,有一个规则需要遵守,即出现在select列表中的字段,如果没有在组函数中,那么必须出现在group by 子句中。(select中的字段不可以单独出现,必须出现在group语句中或者在组函数中。)

    让我一愣的那种,我记得 mysql 不是这个样子的 ,不可能 oracle 是不支持

    select ep.evatent,ep.speype,SUM(ep.score) as score,COUNT(ep.paid) as num from  ep LEFT JOIN e ON ep.id= e.id
    GROUP BY ep.evatent
    

    我又百度了一下连表 group by 发现

    select ep.evatent,ep.speype,SUM(ep.score) as score,COUNT(ep.paid) as num from  ep LEFT JOIN e ON ep.id= e.id
    GROUP BY ep.evatent,ep.speype
    

    这个样子 就可以了

    查看博客:https://blog.51cto.com/7915791/1430849

    展开全文
  • 目录 数据准备: ...1,创建emp和dept,并向其中导入如下的数据: create database db_select; use db_select; create table if not exists dept( deptno int, dname string, loc int ) row fo...

    目录

    数据准备:

    分组实操练习:

    Join连接实操练习:

    多表的连接实操练习:


    数据准备:

    1,创建emp表和dept表,并向其中导入如下的数据:
    
    create database db_select;
    use db_select;
    
    create table if not exists dept(
    deptno int,
    dname string,
    loc int
    )
    row format delimited
    fields terminated by '\t';
    
    create table if not exists emp(
    empno int,
    ename string,
    job string,
    mgr int,
    hiredata string,
    sal double,
    comm double,
    deptno int
    )
    row format delimited
    fields delimited by '\t';
    
    0: jdbc:hive2://hadoop108:10000> show tables;
    +-----------+--+
    | tab_name  |
    +-----------+--+
    | dept      |
    | emp       |
    | location  |
    +-----------+--+
    
    [isea@hadoop108 datas]$ vim dept.txt
    10	ACCOUNTING	1700
    20	RESEARCH	1800
    30	SALES	1900
    40	OPERATIONS	1700
    
    [isea@hadoop108 datas]$ vim emp.txt
    7369	SMITH	CLERK	7902	1980-12-17	800.00		20
    7499	ALLEN	SALESMAN	7698	1981-2-20	1600.00	300.00	30
    7521	WARD	SALESMAN	7698	1981-2-22	1250.00	500.00	30
    7566	JONES	MANAGER	7839	1981-4-2	2975.00		20
    7654	MARTIN	SALESMAN	7698	1981-9-28	1250.00	1400.00	30
    7698	BLAKE	MANAGER	7839	1981-5-1	2850.00		30
    7782	CLARK	MANAGER	7839	1981-6-9	2450.00		10
    7788	SCOTT	ANALYST	7566	1987-4-19	3000.00		20
    7839	KING	PRESIDENT		1981-11-17	5000.00		10
    7844	TURNER	SALESMAN	7698	1981-9-8	1500.00	0.00	30
    7876	ADAMS	CLERK	7788	1987-5-23	1100.00		20
    7900	JAMES	CLERK	7698	1981-12-3	950.00		30
    7902	FORD	ANALYST	7566	1981-12-3	3000.00		20
    7934	MILLER	CLERK	7782	1982-1-23	1300.00		10
    
    [isea@hadoop108 datas]$ vim location.txt
    1700    Beijing
    1800    London
    1900    Tokyo
    
    
    
    load data local inpath '/opt/module/datas/dept.txt' into table dept;
    
    load data local inpath '/opt/module/datas/emp.txt' into table emp;
    
    load data local inpath '/opt/module/datas/location.txt' into table location;

    分组实操练习:

    1,计算每个部门的平均工资:
    select deptno,avg(sal) from emp group by deptno;
    +---------+---------------------+--+
    | deptno  |         _c1         |
    +---------+---------------------+--+
    | 10      | 2916.6666666666665  |
    | 20      | 2175.0              |
    | 30      | 1566.6666666666667  |
    +---------+---------------------+--+
    
    
    2,计算emp每个部门的最高薪水:
    select deptno,max(sal) from emp group by deptno;
    +---------+---------+--+
    | deptno  |   _c1   |
    +---------+---------+--+
    | 10      | 5000.0  |
    | 20      | 3000.0  |
    | 30      | 2850.0  |
    +---------+---------+--+
    
    3,求每个部门的平均薪水大于2000的部门:
    select deptno,avg(sal) AVG from emp group by deptno having AVG > 2000; 
    +---------+---------------------+--+
    | deptno  |         avg         |
    +---------+---------------------+--+
    | 10      | 2916.6666666666665  |
    | 20      | 2175.0              |
    +---------+---------------------+--+
    
    4,根据员工表和部门表中的部门编号相等,查询员工编号、员工名称和部门名称;
    select empno,ename,dname from emp left join dept on  emp.deptno = dept.deptno;
    +--------+---------+-------------+--+
    | empno  |  ename  |    dname    |
    +--------+---------+-------------+--+
    | 7369   | SMITH   | RESEARCH    |
    | 7499   | ALLEN   | SALES       |
    | 7521   | WARD    | SALES       |
    | 7566   | JONES   | RESEARCH    |
    | 7654   | MARTIN  | SALES       |
    | 7698   | BLAKE   | SALES       |
    | 7782   | CLARK   | ACCOUNTING  |
    | 7788   | SCOTT   | RESEARCH    |
    | 7839   | KING    | ACCOUNTING  |
    | 7844   | TURNER  | SALES       |
    | 7876   | ADAMS   | RESEARCH    |
    | 7900   | JAMES   | SALES       |
    | 7902   | FORD    | RESEARCH    |
    | 7934   | MILLER  | ACCOUNTING  |
    +--------+---------+-------------+--+
    

    Join连接实操练习:

    合并员工表和部门表:这里使用到了内连接
    select e.ename,e.empno,e.sal,e.deptno,d.dname from emp e join dept d on e.deptno = d.deptno;
    +----------+----------+---------+-----------+-------------+--+
    | e.ename  | e.empno  |  e.sal  | e.deptno  |   d.dname   |
    +----------+----------+---------+-----------+-------------+--+
    | SMITH    | 7369     | 800.0   | 20        | RESEARCH    |
    | ALLEN    | 7499     | 1600.0  | 30        | SALES       |
    | WARD     | 7521     | 1250.0  | 30        | SALES       |
    | JONES    | 7566     | 2975.0  | 20        | RESEARCH    |
    | MARTIN   | 7654     | 1250.0  | 30        | SALES       |
    | BLAKE    | 7698     | 2850.0  | 30        | SALES       |
    | CLARK    | 7782     | 2450.0  | 10        | ACCOUNTING  |
    | SCOTT    | 7788     | 3000.0  | 20        | RESEARCH    |
    | KING     | 7839     | 5000.0  | 10        | ACCOUNTING  |
    | TURNER   | 7844     | 1500.0  | 30        | SALES       |
    | ADAMS    | 7876     | 1100.0  | 20        | RESEARCH    |
    | JAMES    | 7900     | 950.0   | 30        | SALES       |
    | FORD     | 7902     | 3000.0  | 20        | RESEARCH    |
    | MILLER   | 7934     | 1300.0  | 10        | ACCOUNTING  |
    +----------+----------+---------+-----------+-------------+--+
    这里如果没一个员工刚来,暂时没有分配部门,将不会显示在查询结果中
    
    
    左外连接:左表的所有记录都会被保留下来,没有匹配到的,以null显示:
    select e.empno,e.ename,e.sal,d.dname from emp e left join dept d where e.deptno = d.deptno;
    +----------+----------+---------+-------------+--+
    | e.empno  | e.ename  |  e.sal  |   d.dname   |
    +----------+----------+---------+-------------+--+
    | 7369     | SMITH    | 800.0   | RESEARCH    |
    | 7499     | ALLEN    | 1600.0  | SALES       |
    | 7521     | WARD     | 1250.0  | SALES       |
    | 7566     | JONES    | 2975.0  | RESEARCH    |
    | 7654     | MARTIN   | 1250.0  | SALES       |
    | 7698     | BLAKE    | 2850.0  | SALES       |
    | 7782     | CLARK    | 2450.0  | ACCOUNTING  |
    | 7788     | SCOTT    | 3000.0  | RESEARCH    |
    | 7839     | KING     | 5000.0  | ACCOUNTING  |
    | 7844     | TURNER   | 1500.0  | SALES       |
    | 7876     | ADAMS    | 1100.0  | RESEARCH    |
    | 7900     | JAMES    | 950.0   | SALES       |
    | 7902     | FORD     | 3000.0  | RESEARCH    |
    | 7934     | MILLER   | 1300.0  | ACCOUNTING  |
    +----------+----------+---------+-------------+--+
    这里如果没一个员工刚来,暂时没有分配部门,也会显示在查询结果中
    
    右外连接:右表的所有记录都会被保留下来,没有匹配到的,以null显示:
    select e.empno,e.ename,e.sal,d.dname from emp e right join dept d where e.deptno = d.deptno;
    +----------+----------+---------+-------------+--+
    | e.empno  | e.ename  |  e.sal  |   d.dname   |
    +----------+----------+---------+-------------+--+
    | 7782     | CLARK    | 2450.0  | ACCOUNTING  |
    | 7839     | KING     | 5000.0  | ACCOUNTING  |
    | 7934     | MILLER   | 1300.0  | ACCOUNTING  |
    | 7369     | SMITH    | 800.0   | RESEARCH    |
    | 7566     | JONES    | 2975.0  | RESEARCH    |
    | 7788     | SCOTT    | 3000.0  | RESEARCH    |
    | 7876     | ADAMS    | 1100.0  | RESEARCH    |
    | 7902     | FORD     | 3000.0  | RESEARCH    |
    | 7499     | ALLEN    | 1600.0  | SALES       |
    | 7521     | WARD     | 1250.0  | SALES       |
    | 7654     | MARTIN   | 1250.0  | SALES       |
    | 7698     | BLAKE    | 2850.0  | SALES       |
    | 7844     | TURNER   | 1500.0  | SALES       |
    | 7900     | JAMES    | 950.0   | SALES       |
    +----------+----------+---------+-------------+--+
    这里如果有一个刚陈成立的部门,暂时没有员工被调到该部门,那么这个部门仍然会显示在这个部门中
    
    
    满外连接:左右表中的,没有匹配到的,都会以null显示
    select e.empno,e.ename,e.sal,d.dname from emp e full join dept d where e.deptno = d.deptno;
    +----------+----------+---------+-------------+--+
    | e.empno  | e.ename  |  e.sal  |   d.dname   |
    +----------+----------+---------+-------------+--+
    | 7934     | MILLER   | 1300.0  | ACCOUNTING  |
    | 7839     | KING     | 5000.0  | ACCOUNTING  |
    | 7782     | CLARK    | 2450.0  | ACCOUNTING  |
    | 7876     | ADAMS    | 1100.0  | RESEARCH    |
    | 7788     | SCOTT    | 3000.0  | RESEARCH    |
    | 7369     | SMITH    | 800.0   | RESEARCH    |
    | 7566     | JONES    | 2975.0  | RESEARCH    |
    | 7902     | FORD     | 3000.0  | RESEARCH    |
    | 7844     | TURNER   | 1500.0  | SALES       |
    | 7499     | ALLEN    | 1600.0  | SALES       |
    | 7698     | BLAKE    | 2850.0  | SALES       |
    | 7654     | MARTIN   | 1250.0  | SALES       |
    | 7521     | WARD     | 1250.0  | SALES       |
    | 7900     | JAMES    | 950.0   | SALES       |
    +----------+----------+---------+-------------+--+
    没有部门的员工和没有员工的部门都会显示在这张表中

    多表的连接实操练习:

    1,多表的连接查询:
    select e.ename,d.dname,l.loc_name 
    from emp e left join dept d on e.deptno = d.deptno 
    left join location l on
    d.loc = l.loc;
    
    +----------+-------------+-------------+--+
    | e.ename  |   d.dname   | l.loc_name  |
    +----------+-------------+-------------+--+
    | SMITH    | RESEARCH    | London      |
    | ALLEN    | SALES       | Tokyo       |
    | WARD     | SALES       | Tokyo       |
    | JONES    | RESEARCH    | London      |
    | MARTIN   | SALES       | Tokyo       |
    | BLAKE    | SALES       | Tokyo       |
    | CLARK    | ACCOUNTING  | Beijing     |
    | SCOTT    | RESEARCH    | London      |
    | KING     | ACCOUNTING  | Beijing     |
    | TURNER   | SALES       | Tokyo       |
    | ADAMS    | RESEARCH    | London      |
    | JAMES    | SALES       | Tokyo       |
    | FORD     | RESEARCH    | London      |
    | MILLER   | ACCOUNTING  | Beijing     |
    +----------+-------------+-------------+--+
    
    
    大多数情况下,Hive会对每对JOIN连接对象启动一个MapReduce任务。本例中会首先启动一个MapReduce job对
    表e和表d进行连接操作,然后会再启动一个MapReduce job将第一个MapReduce job的输出和表l;进行连接操作

     

    展开全文
  • 我想获得如下图sql3的结果集,但是sql1中group by后取到了2017-05-02的filename为null的一条记录,而sql2中的记录缺失了filename为null,但是plan_place不为空的两条记录,解决方法如sql3,先对filename进行排序,将...

    我想获得如下图sql3的结果集,但是sql1中group by后取到了2017-05-02的filename为null的一条记录,而sql2中的记录缺失了filename为null,但是plan_place不为空的两条记录,解决方法如sql3,先对filename进行排序,将filename不为null的放在前面

    sql1


    sql2


    sql3




    展开全文
  • 使用jpa操作多张表进行关联查询时,有重复数据需要分组去重 1)确定主:将有重复数据的表格作为主,表明关系 public class AttendanceRuleTypeItem implements Serializable { @Id @GeneratedValue(strategy = ...
  •  //linq实现两表关联查询,使用group by进行分组,groupby之间放你后面要select的对象(如果只有一个字段,可以直接写,如果有多个可以像我一样使用匿名对象)  //select的时候也使用匿名对象的方式,并可以...
  • .groupBy('post.topic_id') .addGroupBy('topic.id') .where('post.topic_id is not null') .orderBy('sum', 'DESC') .limit(5) .getRawMany(); console.log(post); return post; } createQueryBuilder...
  • join多连接和group by分组

    千次阅读 2021-02-05 03:20:07
    上一篇里面我们实现了单查询和top N查询,这一篇我们来讲述如何实现多连接和group by分组。一、多连接多连接的时间是数据库一个非常耗时的操作,因为连接的时间复杂度是M*N(M,N是要连接的的记录数),如果...
  • 数据库sql语句多连接查询+group by分组的使用

    万次阅读 多人点赞 2018-08-01 10:47:02
    其实,在学校的一次课设中就发现了不会多连接查询+group by分组,这次实在实习中遇到这种问题,不可能混过去了,便解决一下它吧. 问题背景: 今天写sql语句的时候,需要从两个中查出关联的数据,并且需要分组 第...
  • 思路:以条件筛选出t2中数据,以少量数据作为驱动,查询t1表关联数据,之后基于t1的结果集进行group by操作。 完美解决!   最后优化索引: 1、 group by 后的字段一定是要添加索引的,否则还是 ...
  • MySQL多查询之GroupBy

    千次阅读 2014-11-24 17:34:21
    BY(消费时间),最后根据customer_id来GROUP BY。 但结果是不对的。  这是因为MySQL:  写的顺序:select ... from... where.... group by... having... order by..  执行顺序:from... where......
  • 场景是这样的:我需要通过关联查询出我想要的数据,然后我可能会根据id或者name之类的字段使用group by 进行分组,分组后我仅想把最新的一条记录显示出来,于是我需要根据数据库里对应数据的创建时间字段进行order ...
  • MySQL多连接时想要用group by去重

    千次阅读 2020-08-20 16:18:53
    可能看到这里还是会有点懵逼,所以下面贴出group by的用法 group by可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个汇总 select字句中的列名必须为分组列或列函数.列函数对于group by字句定义...
  • 今天遇到一个问题,就是一张是根据news_id来关联多条记录,然后另外一张希望使用Left JOIN进行关联查询操作,遇到了一个坑,就是Left JOIN 与GROUP BY冲突,需要着实注意。查询解决了好久才算是放弃了最简SQL,...
  • 这个案例是根据分组查询,并且得到每组的条数,不懂得可以q我:1710086675,欢迎认识更多新朋友
  • a ------ b ----- c SELECT COUNT(*) FROM (SELECT a.字段,b.字段,c.字段 FROMa LEFT JOIN b ON a.id = b.id LEFT JOIN c ON a.id = b.id GROUP BY a.字段,b.字段) Z
  • MySQL对数据进行分组查询(GROUP BY)GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组。字段中值相等的为一组。基本的语法格式如下:GROUP BY 属性名 [HAVING 条件表达式] [WITH ROLLUP]属性名:是指...
  • 数据内容: 销售姓名 商家 售卖电器类型 小明 A商家 空调 小明 A商家 洗衣机 小刚 A商家 空调 小明 B商家 空调 期望结果 销售姓名 商家 售卖电器类型 小明,小刚 A商家 空调 小明 A商家...
  • 性能优化-group by的优化

    千次阅读 2021-05-07 14:14:15
    4、group by的优化最好使用同一中的列,需求:每个演员所参演影片的数量-(影片和演员)explain select actor.first_name,actor.last_name,count(*)from sakila.film_actorinner join sakila.actor using(actor_...
  • 假设有两个。文章和评论。如下: [code="sql"] article ( id int not null, title varchar not null, content varchar, primary key(id) ); comment ( id int not null, article_id ...
  • Oracle group by用法介绍

    千次阅读 2016-09-24 17:36:50
    group by是分组函数。一般都是配合聚合函数使用的。介绍几个重要的知识点。select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面group by是分组函数,所以查询的数据都是基于这分组来说的。看例子...
  • 知识点:group by进行分组查询、having子句进行分组查询、多连接查询的使用。 1、使用SQL语句创建多(本章学习的准备工作) 使用SQL语句单独创建数据库、创建,我们都会了,那么当两个有关系的时候,...
  • mysql使用group by实现组内排序实战

    千次阅读 2019-05-28 20:54:48
    一、前言 需求是:获取用户充值总数最多的前100名,并且获取最新充值的时间和充值...分析之后,大概就了解了,要先group by分组,然后进行组内排序。 二、解决过程 1、先按大意写一条sql 主要字段说明: pay_time ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 134,776
精华内容 53,910
关键字:

关联表groupby