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 合并计数结果的主要内容,如果未能解决你的问题,请参考以下文章