Sql 对同一个表计数两次

Sql 对同一个表计数两次,sql,oracle,Sql,Oracle,我有下表 我想计算每月的交易数量,并为每月的总计数添加另一列 结果应该如下所示 我正在尝试以下代码: select aa.date , aa.department , count(aa.trans_id) "COUNT PER DEPARTMENT" , ( select count(trans_id) from table bb where aa.date = bb.date groub by date ) overallcount from table aa group by aa

我有下表

我想计算每月的交易数量,并为每月的总计数添加另一列

结果应该如下所示

我正在尝试以下代码:

select  aa.date , aa.department , count(aa.trans_id) "COUNT PER DEPARTMENT"  
, ( select count(trans_id) from table bb where aa.date = bb.date groub by date ) overallcount
from table aa
group by aa.date , aa.department
这个代码不起作用需要很长时间,我想它有问题。

你能试试这个吗-

select  aa.date , 
aa.department,
count(aa.trans_id) "COUNT PER DEPARTMENT",
max(bb.overall) overall
from table aa
inner join (
    select date,
    count(trans_id) overall
    from table
    group by date
)bb ON aa.date = bb.date
group by aa.date , aa.department
你能试试这个吗-

select  aa.date , 
aa.department,
count(aa.trans_id) "COUNT PER DEPARTMENT",
max(bb.overall) overall
from table aa
inner join (
    select date,
    count(trans_id) overall
    from table
    group by date
)bb ON aa.date = bb.date
group by aa.date , aa.department

您可以将
分析函数
distinct
关键字一起使用,如下所示:

Select distinct date, department,
       Count(1) over (partition by date, department) as count_per_department,
       Count(1) over (partition by date) as overallcount
  From aa;

干杯

您可以将
分析函数
distinct
关键字一起使用,如下所示:

Select distinct date, department,
       Count(1) over (partition by date, department) as count_per_department,
       Count(1) over (partition by date) as overallcount
  From aa;

干杯

只需使用聚合和窗口函数:

select date, department,
       count(*) as department_cnt,
       sum(count(*)) over (partition by date) as month_cnt
from t
group by date, department;

只需使用聚合和窗口函数:

select date, department,
       count(*) as department_cnt,
       sum(count(*)) over (partition by date) as month_cnt
from t
group by date, department;

除了这个答案,你还需要在计算时按月分组。因此,请将日期列格式设置为char YYYY-MM:to_char(x.created_date,'YYYY-MM'),而不是直接使用日期。我确信日期会被截断为month,因此我认为这不是必需的,并且这里根本不需要group by。请选择distinct to_char(date_column,'yyyyy-MM')、department、Count(1)over(partition by to_char)(日期列'YYYY-MM',部门)作为每个部门的计数,计数(1)超过(按TO字符划分(日期列'YYYY-MM'))作为aa的overallcount;您是对的,不需要group by。我的意思是逻辑上的group by。我在子查询中使用了内部联接,它工作得很好。谢谢。除了这个答案,您需要在计数时按月分组。因此,将日期列格式化为char YYYY-MM:to_char(x.created_date,'yyyyy-MM')不要直接使用日期。我确信日期被截断为月份,所以我认为这不是必需的,这里根本不需要分组依据。选择distinct to_CHAR(日期栏'YYYY-MM'),department,Count(1)over(按to_CHAR(日期栏'YYYY-MM'),department分区)作为每个部门的计数,Count(1)over(按TO_CHAR分区(日期列'YYYY-MM'))正如aa中的overallcount;你是对的,不需要group by。我的意思是逻辑上的group by。我在子查询中使用了内部联接,它工作得很好。谢谢。@Nawaf…这比必要的复杂得多,可能也慢。@Nawaf…这比必要的复杂得多,可能也慢得多。