gpt4 book ai didi

MySQL 替代子查询/连接

转载 作者:行者123 更新时间:2023-11-29 01:52:17 25 4
gpt4 key购买 nike

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

  • 姓名:公司名称
  • 州:公司所在的州在
  • 收入:公司年收入
  • 员工:有多少该公司有员工
  • 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

我的问题是这样的。我可以在没有子查询或联接的情况下执行此操作吗?由于查询已经在每一行上迭代(没有索引),有什么方法可以添加一个条件,如果该行满足最低收入要求并且处于相同状态,它将为查询增加某种计数器(类似于 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

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

多亏了这个StackOverflow问题。当您在 google 中搜索“sql conditional count”时,您会找到它。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com