MySQL 替代 subquery/join
MySQL alternative to subquery/join
我正在为此查询寻找 subqueries/joins 的有效替代方法。假设我 table 存储有关公司的信息,具有以下列:
- 姓名:公司名称
- 州:公司所在的州
在
- 收入:公司年收入
- 员工:有多少
该公司有
名员工
- active_business: 是不是公司
在做生意(1 = 是,0 = 否)
假设从这个table,我想知道每个州有多少公司满足最低收入要求,以及有多少公司满足最低收入要求雇员。这可以表示为以下子查询(也可以写成一个连接):
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)?
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
的值,然后我们将求和。另一列也是如此。
感谢这个 Whosebug 问题。当您在 google.
中搜索 "sql conditional count" 时,您会找到它
我正在为此查询寻找 subqueries/joins 的有效替代方法。假设我 table 存储有关公司的信息,具有以下列:
- 姓名:公司名称
- 州:公司所在的州 在
- 收入:公司年收入
- 员工:有多少 该公司有 名员工
- active_business: 是不是公司 在做生意(1 = 是,0 = 否)
假设从这个table,我想知道每个州有多少公司满足最低收入要求,以及有多少公司满足最低收入要求雇员。这可以表示为以下子查询(也可以写成一个连接):
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)?
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
的值,然后我们将求和。另一列也是如此。
感谢这个 Whosebug 问题。当您在 google.
中搜索 "sql conditional count" 时,您会找到它