SQL 合并计数结果

Posted

技术标签:

【中文标题】SQL 合并计数结果【英文标题】:SQL combine count results 【发布时间】:2014-09-28 06:03:47 【问题描述】:

我有两个名为 REQUESTS 和 OPENISSUES 的大表。 一个保存请求信息,另一个保存每个请求的问题数。

在 REQUESTS 表中有一个状态列,用于跟踪请求状态。

我正在寻找一个查询,它计算 OPENISSUES 表中所有未将状态设置为“已关闭”的请求的记录

我的查询计算所有记录,但没有在一行中返回结果。 我得到每个请求的结果。有人有想法吗?

这是我的查询:

SELECT
(SELECT COUNT(ID) FROM openissues WHERE openissues.requestID=requests.ID) AS TotalIssues
FROM requests
WHERE requests.status<>'Closed'

现在欢迎任何想法。 否则我会开始统计 ASP 中的记录。

问候, 玻璃块

【问题讨论】:

你的数据库系统是什么?你能提供你期望的结果吗? 【参考方案1】:
SELECT count(DISTINCT openissues.requestID)  
FROM openissues
INNER JOIN requests ON openissues.requestID = requests.ID 
WHERE rq.status <> 'Closed' 

SELECT count(*)
FROM openissues
INNER JOIN requests ON openissues.requestID = requests.ID 
WHERE rq.status <> 'Closed' 
GROUP BY openissues.requestID

这些查询将统计 requests 表中至少有一条未处于 Closed 状态的记录的 requestID 的数量。

@ypercube 的注意事项

它不会将同一个 requestID 计算两次(就像 Bowlturner 可能的那样)。

【讨论】:

他们想要一个单一的结果,而不是 GROUP BY(如 Bowlturner 的回答。) @ypercube - 你可能是对的,我无法从问题中看出。 “我的查询计算了所有记录,但没有在一行中返回结果。我得到每个请求的结果。” @ypercube - 我的查询确实返回了一行,但我将其更改为使用 DISTINCT 关键字而不是 group by,这可能会让您更快乐。 :D @ypercube - 我应该指出,我的查询将返回与 bowturner 不同的结果。我不确定 OP 想要哪个,我期待我的查询,这就是我发布它的原因。【参考方案2】:

我认为你需要的只是一个加入:

  SELECT count(*) as TotalIssues
  FROM openissues o
  INNER JOIN requests r ON ( o.requestID = r.ID )
  WHERE r.status != 'Closed'

【讨论】:

!= 不是所有 DBMS 中的有效运算符,仅在其中一些中。【参考方案3】:

这当然是你想要的。

SELECT count(*) 
FROM openissues op, requests rq 
WHERE op.requestID = rq.ID and rq.status <> 'Closed'

SELECT count(*) 
FROM openissues op INNER JOIN requests rq ON op.requestID = rq.ID
WHERE rq.status <> 'Closed'

【讨论】:

以上是关于SQL 合并计数结果的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB 将相关收集项计数与其他收集结果合并

SQL 2012 将来自多个表的多个查询与连接和计数合并到一个表中

合并列并获取计数 SQL Server 2008

SQL、值过多、结果合并

如何使用 Laravel 合并两个计数

sql 科学计数法显示结果 怎么处理