首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用条件和不使用联接的SQL计数

使用条件和不使用联接的SQL计数
EN

Stack Overflow用户
提问于 2020-04-07 09:43:15
回答 2查看 40关注 0票数 0

我的目标如下表所示:

代码语言:javascript
复制
Key      | Count since date X | Count total
1        | 4                  | 28

通过两个简单的选择,我可以获得这个值:(表的键由3列[t$ncmp, t$trav, t$seqn]组成)

代码语言:javascript
复制
1. SELECT COUNT(*) FROM  db.table WHERE t$date >= sysdate-2 GROUP BY t$ncmp, t$trav, t$seqn
2. SELECT COUNT(*) FROM  db.table GROUP BY t$ncmp, t$trav, t$seqn

我怎样才能加入这些声明?

我试过的是:

代码语言:javascript
复制
SELECT n.t$trav, COUNT(n.t$trav), m.total FROM db.table n 
LEFT JOIN (SELECT t$ncmp, t$trav, t$seqn, COUNT(*) as total FROM db.table
           GROUP BY t$ncmp, t$trav, t$seqn) m 
ON (n.t$ncmp = m.t$ncmp AND n.t$trav = m.t$trav AND n.t$seqn = m.t$seqn)
WHERE n.t$date >= sysdate-2
GROUP BY n.t$ncmp, n.t$trav, n.t$seqn

我尝试了不同的变量,但总是出现“组比丢失”或“未知限定符”之类的错误。现在,这至少会执行,但总数总是2。

代码语言:javascript
复制
T$TRAV  COUNT(N.T$TRAV) TOTAL
4       2                   2
29      3                   2
51      1                   2
62      2                   2
16      1                   2
....

如果有关系,我将作为OPENQUERY从MSSQLSERVER运行到Oracle-DB。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-07 10:34:06

我会试着

代码语言:javascript
复制
GROUP BY n.t$trav, m.total

通常情况下,GROUP BY的列与您的SELECT相同--除了那些设置函数的参数。

票数 1
EN

Stack Overflow用户

发布于 2020-04-07 11:02:19

我的目标如下表所示:

如果是这样的话,您似乎需要有条件的聚合:

代码语言:javascript
复制
select key, count(*) as total,
       sum(case when datecol >= date 'xxxx-xx-xx' then 1 else 0 end) as total_since_x
from t
group by key;

我不知道这与您的示例查询有什么关系。我看不出这段代码和你的问题之间的关系。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61077097

复制
相关文章

相似问题

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