【发布时间】:2016-11-10 15:10:02
【问题描述】:
我正在为此查询寻找子查询/联接的有效替代方法。假设我有一个表,其中存储有关公司的信息,其中包含以下列:
- name:公司名称
- state:公司所在的州 在
- 收入:公司的年收入
- 员工:有多少 这家公司拥有的员工
- active_business:是否是公司 正在营业(1 = 是,0 = 否)
假设从这张表中,我想找出每个州有多少公司满足最低收入的要求,以及有多少公司满足最低员工人数的要求。这可以表示为以下子查询(也可以写成一个连接):
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)?
【问题讨论】:
-
没有索引?好吧,那就是你的问题。解决了。
-
通常情况下,这种情况会被编入索引。但是,这实际上并没有在 mysql 上运行。我在 Memsql 中使用 JSON 数据存储和用户提交的动态字段,因此特定值的索引不是正确的路径。此外,由于 memsql 在内存中,它已经运行得非常快,因此不需要索引。我提交了这样的问题,因为它在逻辑上以更简单的方式等同于问题。