首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在一个查询中使用多个计数和减法函数

在一个查询中使用多个计数和减法函数
EN

Database Administration用户
提问于 2021-01-21 06:58:19
回答 1查看 25关注 0票数 0

我尝试在mysql中做更多的预先查询,但是在查询中出现错误,我尝试计数和分组。以下是我的疑问:

代码语言:javascript
复制
"select department,
(select count(id) from mcu group by dept) as tot1,
(select count(status_mcu) from mcu where status_mcu='done' group by dept) as tot2,
(tot1 - sum(select count(status_mcu) where status_mcu='done') as tot3,
FROM mcu"

你能帮帮我吗?我的问题出什么问题了?我在其他线程中做了一些搜索,这就是我得到的。请尝试执行如下查询:

代码语言:javascript
复制
"select department,
select count(id),
sum(case when status_mcu='done' then 1 end)
...
"

也不起作用。任何帮助都是感激的。

我的sql版本是5.5.25

EN

回答 1

Database Administration用户

回答已采纳

发布于 2021-01-21 15:22:11

如果没有看到返回的确切错误消息,我就无法100%确定,但是有两个明显的错误:

  1. 列名是Department还是Dept?这似乎不太清楚。
  2. 您不能引用tot1,除非它首先在CTE或子select(派生表)中派生。
  3. 子查询sum(select count(status_mcu) where status_mcu='done')没有FROM子句。此外,我不确定聚合高级别聚合是必要的/需要的目的是什么。
  4. 作为一个一般性的批评,您一次又一次地碰到同一个表,从性能的角度来看,这不是最优的。

从这个开始,看看它是否返回所需的结果(如果没有,您需要澄清您的问题以提供适当的逻辑):

代码语言:javascript
复制
SELECT
  mcu.Dept
 ,COUNT(mcu.Id) AS Tot1
 ,SUM
    (
      CASE
        WHEN mcu.status_mcu='done' THEN 1
        ELSE 0
      END
    ) AS tot2
 ,COUNT(mcu.Id) - 
    SUM
      (
        CASE
          WHEN mcu.status_mcu='done' THEN 1
          ELSE 0
        END
      ) AS tot3
FROM
  mcu mcu
GROUP BY
  mcu.Dept
票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/283695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档