繁体   English   中英

MySQL替代子查询/联接

[英]MySQL alternative to subquery/join

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

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

假设从此表中,我想找出每个州有多少公司满足最低收入要求,还有多少公司达到最低雇员人数要求。 这可以表示为以下子查询(也可以写为aa join):

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

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

我认为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

如您所见,每个记录的值将为1 ,并且收入大于1000000 (否则为0),那么我们将得出总和。 另一列也是如此。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM