服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - MySQL两个查询如何合并成一个结果详解

MySQL两个查询如何合并成一个结果详解

2022-09-01 18:16kuku_zhongzi Mysql

利用union关键字,可以给出多条select语句,并将它们的结果组合成单个结果集,下面这篇文章主要给大家介绍了关于MySQL两个查询如何合并成一个结果的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下

MySQL 查询合并

如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字。union(或称为联合)的作用是将多个结果合并在一起显示出来。

注意:两个列表中的字段要一样才可以合并(顺序也要一样)

满足条件:

1、两个select查询的列的数量必须相同;

2、每个列的数据类型需要相似;

1.先写两条select

第一条select:

?
1
2
3
4
5
6
7
8
9
10
SELECT
    DATE_FORMAT(add_time, '%Y-%m-%d') as 'add_time',
    COUNT(add_time) as 'reach_intention'
FROM
    table1
where
## where 条件可以根据自己实际情况来定
    DATE_FORMAT(add_time, '%Y-%m-%d') > DATE_FORMAT(date_sub(now(), interval 1 month), '%Y-%m-%d')
group by
    DATE_FORMAT(add_time, '%Y-%m-%d')

这是查询出来的结果

MySQL两个查询如何合并成一个结果详解

第二条select:

?
1
2
3
4
5
6
7
8
9
10
select
    DATE_FORMAT(add_date, '%Y-%m-%d') as 'add_time' ,
    COUNT(add_date)  as 'post_release'
from
    table2
where
## where 条件可以根据自己实际情况来定
    DATE_FORMAT(add_date, '%Y-%m-%d') > DATE_FORMAT(date_sub(now(), interval 1 month), '%Y-%m-%d')
group by
    DATE_FORMAT(add_date, '%Y-%m-%d')

第二条select查询出来的结果

MySQL两个查询如何合并成一个结果详解

2.合并查询结果

先把两条select用union all连接起来

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
        DATE_FORMAT(add_time, '%Y-%m-%d') as 'add_time', COUNT(add_time) as 'reach_intention' '' as 'post_release'
    FROM
        table1
    where
        DATE_FORMAT(add_time, '%Y-%m-%d') > DATE_FORMAT(date_sub(now(), interval 30 day), '%Y-%m-%d')
    group by
        DATE_FORMAT(add_time, '%Y-%m-%d')
UNION ALL
    select
        DATE_FORMAT(add_date, '%Y-%m-%d') as 'add_time' , '' as 'reach_intention' COUNT(add_date) as 'post_release'
    from
        table2
    where
        DATE_FORMAT(add_date, '%Y-%m-%d') > DATE_FORMAT(date_sub(now(), interval 30 day), '%Y-%m-%d')
    group by
        DATE_FORMAT(add_date, '%Y-%m-%d')

在外层嵌套一个select

?
1
2
3
## 括号里面放 用 union all 连接的select
select * from () test
## 这里要给表起个别名 不然会报 Every derived table must have its own alias 每个派生表都必须有自己的别名

把union all 连接的select 放到括号里面去然后运行

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
select
    *
from
(
    SELECT
        DATE_FORMAT(add_time, '%Y-%m-%d') as 'add_time', COUNT(add_time) as 'reach_intention' '' as 'post_release'
    FROM
        table1
    where
        DATE_FORMAT(add_time, '%Y-%m-%d') > DATE_FORMAT(date_sub(now(), interval 30 day), '%Y-%m-%d')
    group by
        DATE_FORMAT(add_time, '%Y-%m-%d')
UNION ALL
    select
        DATE_FORMAT(add_date, '%Y-%m-%d') as 'add_time' , '' as 'reach_intention' COUNT(add_date) as 'post_release'
    from
        table2
    where
        DATE_FORMAT(add_date, '%Y-%m-%d') > DATE_FORMAT(date_sub(now(), interval 30 day), '%Y-%m-%d')
    group by
        DATE_FORMAT(add_date, '%Y-%m-%d')
) test

运行结果

MySQL两个查询如何合并成一个结果详解

把结果按日期分组排序。

使用 group by 和 order by 关键字

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
select
    add_time,
    sum(reach_intention) as 'reach_intention' ,
    sum(post_release) as 'post_release'
from
    (
    SELECT
        DATE_FORMAT(add_time, '%Y-%m-%d') as 'add_time', COUNT(add_time) as 'reach_intention' , '' as 'post_release'
    FROM
        table1
    where
        DATE_FORMAT(add_time, '%Y-%m-%d') > DATE_FORMAT(date_sub(now(), interval 30 day), '%Y-%m-%d')
    group by
        DATE_FORMAT(add_time, '%Y-%m-%d')
UNION ALL
    select
        DATE_FORMAT(add_date, '%Y-%m-%d') as 'add_time' , '' as 'reach_intention' , COUNT(add_date) as 'post_release'
    from
        table2
    where
        DATE_FORMAT(add_date, '%Y-%m-%d') > DATE_FORMAT(date_sub(now(), interval 30 day), '%Y-%m-%d')
    group by
        DATE_FORMAT(add_date, '%Y-%m-%d') ) test
group by
    test.add_time
order by
    test.add_time desc

结果如下

MySQL两个查询如何合并成一个结果详解

总结

到此这篇关于MySQL两个查询如何合并成一个结果的文章就介绍到这了,更多相关MySQL两个查询合并一个内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/m0_49245543/article/details/117289851

延伸 · 阅读

精彩推荐
  • MysqlMySQL 8.0 Online DDL快速加列的相关总结

    MySQL 8.0 Online DDL快速加列的相关总结

    在实际的MySQL运维过程中,我们经常会遇到业务需要给某张表添加字段的情况,本文将介绍几种加字段的方法,感兴趣的朋友可以参考下...

    DBA随笔6712021-08-09
  • Mysql为什么说MySQL单表数据不要超过500万行

    为什么说MySQL单表数据不要超过500万行

    在本篇文章里小编给大家整理了一篇关于为什么说MySQL单表数据不要超过500万行的相关内容,有兴趣的朋友们阅读下吧。...

    qianfeng_dashuju3012020-10-05
  • MysqlMySQL 去重实例操作详解

    MySQL 去重实例操作详解

    这篇文章主要介绍了MySQL 去重实例操作详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下...

    Java中文社群8402022-07-19
  • Mysql几个MySQL高频面试题的解答

    几个MySQL高频面试题的解答

    这篇文章主要介绍了几个MySQL高频面试题的解答,帮助大家更好的理解和使用MySQL,感兴趣的朋友可以了解下...

    MySQL技术9592021-04-05
  • MysqlMysql 行级锁的使用及死锁的预防方案

    Mysql 行级锁的使用及死锁的预防方案

    mysql的InnoDB,支持事务和行级锁,可以使用行锁来处理用户提现等业务。使用mysql锁的时候有时候会出现死锁,要做好死锁的预防。这篇文章通过实例应用给...

    StudyBlog2772020-07-06
  • MysqlMysql数据库支持的存储引擎对比

    Mysql数据库支持的存储引擎对比

    这篇文章主要介绍了Mysql数据库支持的各个存储引擎之间的对比分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    玉成22611802021-11-12
  • MysqlMySQL查询语句进阶知识集锦

    MySQL查询语句进阶知识集锦

    上次咱们简单的学习了一下select的用法,对数据库大概有了一些基本的了解。咱们接着上次继续来看叭! ...

    IT共享之家8632021-03-15
  • MysqlMySQL之存储函数详细介绍

    MySQL之存储函数详细介绍

    大家好,本篇文章主要讲的是MySQL之存储函数详细介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览...

    我是一棵卷心菜5512022-02-10