mysql - 如何在两个语句上使用联接?

标签 mysql sql database

我有一个语句,用于计算有 attr3 = 1 的记录数。

SELECT 'Dept' AS table_name, COUNT(*)
FROM ((select attr3 from table1) union all
      (select attr3 from table2)
     ) t
WHERE attr3 = '1';

现在我需要另一个语句来执行相同的操作,但计算有 attr3 = 2 的记录数。

SELECT 'Dept' AS table_name, COUNT(*)
    FROM ((select attr3 from table1) union all
          (select attr3 from table2)
         ) t2
    WHERE attr3 = '2';

理想情况下,数据将以这种格式显示

Dept         count(*)
attr3 = 1          4
attr3 = 2          6

如果我单独执行这些语句,则此方法有效,我只是想将它们连接在一起。有人可以帮忙吗?

最佳答案

一个简单的GROUP BYWHERE attr3 in()就足够了。

SELECT Z.attr3 as Dept, count(*) as cnt
FROM (SELECT attr3 FROM table1
      UNION ALL
      SELECT attr3 FROM table2) Z
WHERE attr3 in ('1','2')
GROUP BY Z.attr3

由于 attr3 定义了您想要作为计数依据的组,因此只需对其进行分组,并通过 where 子句将结果限制为并集后的 1,2。

关于mysql - 如何在两个语句上使用联接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41186418/

相关文章:

php - 根据 Doctrine 2 中的值自定义 ORDER BY 子句

mysql - SQL - 从表中选择 bool 结果

mysql - InnoDB 中是否有可能出现双重读取

database - 如何在数据库 : BLOB or ARRAY? 中存储向量

mysql - 如何在没有组的 MIN() 和 MAX() 的情况下获取项目组的 STDDEV()

java - 将 Oracle 合并转换为 MySQL 更新

MySQL Group By 查询产生不确定的结果

mysql - 所有四个部门的通缉犯

sql - 可以使用 SQL 按日期排序但将空日期放在结果集的后面吗?

c# - nHibernate 批量大小不起作用