【问题标题】:SQL combine count resultsSQL 合并计数结果
【发布时间】: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 中的记录。

问候, 玻璃块

【问题讨论】:

  • 你的数据库系统是什么?你能提供你期望的结果吗?

标签: sql count inner-join multiple-results


【解决方案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'

【讨论】:

    猜你喜欢
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    相关资源
    最近更新 更多