首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汇总和合计

汇总和合计
EN

Stack Overflow用户
提问于 2015-01-23 00:10:09
回答 3查看 69关注 0票数 0
代码语言:javascript
复制
SELECT  Region ,
        flag ,
        Name,
        COUNT(ID) AS 'CountWithFlag'
FROM    Table
GROUP BY flag

这个查询提供了以下结果。我是按标志分组的,我能够根据标志得到英语/非英语的计数。我还希望在计数旁边显示英语和非英语的总计计数。

产出:

代码语言:javascript
复制
Region Flag  Name     CountWithFlag
a      0     English        100
b      1     Non-English    200 
c      0     English        100
d      1     Non-English    200

期望产出:

代码语言:javascript
复制
Region Flag  Name     CountWithFlag  Total
a      0     English        100       200
b      1     Non-English    200       400
c      0     English        100       200
d      1     Non-English    200       400

我怎么能这么做?我想申请组的具体计数与标志。但是我也想在同一个查询中得到总数!

关于我怎么做到的有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-23 00:32:34

另一种方式是这样的:

代码语言:javascript
复制
;
WITH    agg1
            AS (
                SELECT  region,
                        flag,
                        name,
                        COUNT(id) AS 'CountWithFlag'
                FROM    [dbo].[t2]
                GROUP BY region,
                        flag,
                        name
                ),
        agg2
            AS (
                SELECT  [name],
                        COUNT(id) AS CountByName
                FROM    [dbo].[t2]
                GROUP BY [name]
                )
    SELECT  [agg1].[region],
            [agg1].[flag],
            [agg1].[name],
            [agg1].[CountWithFlag],
            [agg2].[CountByName]
    FROM    [agg1]
            INNER JOIN [agg2]
                ON [agg2].[name] = [agg1].[name]
票数 0
EN

Stack Overflow用户

发布于 2015-01-23 00:47:06

尝尝这个

代码语言:javascript
复制
  ;
    WITH    cte
              AS ( SELECT DISTINCT
                            Region ,
                            flag ,
                            Name ,
                            COUNT(ID) OVER ( PARTITION BY flag, Region, Name ) AS [CountWithFlag]
                   FROM     [Table]
                 )
        SELECT  Region ,
                flag ,
                Name ,
                SUM([CountWithFlag]) OVER ( PARTITION BY Name ) AS Total
        FROM    cte
票数 0
EN

Stack Overflow用户

发布于 2015-01-23 00:49:28

如果要避免使用窗口函数,可以这样做:

代码语言:javascript
复制
SELECT 
  Region,
  flag,
  Name,
  COUNT(ID) AS CountWithFlag,
  (select count(ID) from Table as tbl1 where tbl1.Name=tbl.Name) AS Total
from Table as tbl
group by Region, flag, Name

但我的观点是,窗口聚合应该运行得更快。

如果要使用窗口聚合,请执行以下操作:

代码语言:javascript
复制
select 
  Region,
  flag,
  Name,
  CountWithFlag,
  sum(CountWithFlag) over(partition by Name) as Total
from (
  SELECT 
    Region,
    flag,
    Name,
    COUNT(ID) AS CountWithFlag
  from Table as tbl
  group by Region, flag, Name
) as tbl
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28100964

复制
相关文章

相似问题

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