MySQL 子查询/连接的替代方案

标签 mysql sql subquery

我正在寻找此查询的子查询/联接的有效替代方案。假设我有一个表,其中存储有关公司的信息,其中包含以下列:

  • 名称:公司名称
  • 州:公司所在州 在
  • 收入:公司的年收入
  • 员工:有多少人 该公司拥有员工
  • active_business:是否为公司 正在营业(1 = 是,0 = 否)

假设我想从这个表中找出每个州有多少家公司满足最低收入要求,以及有多少家公司满足最低员 worker 数要求。这可以表示为以下子查询(也可以写为联接):

SELECT state,
       (
            SELECT count(*)
            FROM records AS a
            WHERE a.state = records.state
              AND a.revenue > 1000000
       ) AS companies_with_min_revenue,
       (
            SELECT count(*)
            FROM records AS a
            WHERE a.state = records.state
              AND a.employees > 10
       ) AS companies_with_min_employees
FROM records
WHERE active_business = 1
GROUP BY state

我的问题是这样的。我可以在没有子查询或连接的情况下执行此操作吗?由于查询已经在每一行上进行迭代(没有索引),是否可以通过某种方式添加一个条件,即如果该行满足最低收入要求并且处于相同状态,它将增加查询的某种计数器(类似于映射/减少)?

最佳答案

我认为CASESUM将解决它:

SELECT state
    , SUM(CASE WHEN R.revenue > 1000000 THEN 1 ELSE 0 END) AS companies_with_min_revenue
    , SUM(CASE WHEN R.employees > 10 THEN 1 ELSE 0 END) AS companies_with_min_employees
    FROM records R
    WHERE R.active_business = 1
    GROUP BY R.state

如您所见,收入大于 1000000(否则为 0)的每条记录的值为 1,然后我们将求总和。另一栏也是如此。

感谢这个StackOverflow问题。当您在 Google 中搜索“sql 条件计数”时,您会发现这一点。

关于MySQL 子查询/连接的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38260038/

相关文章:

php - 复杂的 SQL 查询 - 我该怎么做?

sql - month vs month查询(同表数据)

c# - Asp.NET MVC 应用程序上的 MySQLRoleProvider 错误但仅使用 SQLServer

php - Doctrine 2 查询生成器 abs 函数

SQL Server 选择子集中的顶部?

mysql - 优先于列的条件排序

MySQL:多个子查询的总和

mysql - IFNULL 不返回任何内容,而是返回 0,有什么方法可以使其工作吗?

php - 使用类和 DAO 显示数据库中的数据

php - 查询计数 codeigniter