SQL 查询 - 无法对 3 列中的 2 列进行正确计数

问题描述 投票:0回答:1

我正在尝试从原始数据文件创建一个体积较小的版本,并在最右侧添加 3 COUNT 列。我发现成功为公司网站添加了 COUNT 列,但我在其余两个列上遇到了麻烦。我相信我的问题是当我想要多列输出时不知道如何将

GROUP BY
COUNT
一起使用。

原始数据

状态 公司网站 图像1 图像2
纽约 xxx.com 啊啊 zz
纽约 xxx.com yyy
纽约 xxx.com bb
纽约 xxx.com ccc
纽约 yyy.com dd xxx
纽约 yyy.com
纽约 yyy.com 哎呀
纽约 yyy.com

这是我尝试过的:

SELECT [STATE], 
       [COMPANY WEBSITE], 
       COUNT([COMPANY WEBSITE]) AS [COMPANY COUNT], 
       COUNT([IMAGE 1]) AS [IMAGE 1 COUNT], 
       COUNT([IMAGE 2]) as [IMAGE 2 COUNT] 
FROM [DATA FILE NAME] GROUP BY [COMPANY WEBSITE]

我期待以下结果:

状态 公司网站 公司数量 图像 1 计数 图像 2 计数
纽约 xxx.com 4 3 2
纽约 yyy.com 4 2 1

但是我得到的结果是这样的:

状态 公司网站 公司数量 图像 1 计数 图像 2 计数
纽约 xxx.com 4 4 4
纽约 yyy.com 4 4 4
sql count
1个回答
0
投票

一种方法是使用条件聚合。这(或非常相似)应该适用于大多数 SQL 变体:

WITH
    tbl (STATE, COMPANY_WEBSITE,    IMAGE_1,    IMAGE_2) AS
        ( Select 'NY',  'xxx.com',  'aaa',  'zzz' From Dual Union All
          Select 'NY',  'xxx.com',  NULL,    'yyy' From Dual Union All
          Select 'NY',  'xxx.com',  'bbb',  NULL From Dual Union All
          Select 'NY',  'xxx.com',  'ccc',  NULL From Dual Union All
          Select 'NY',  'yyy.com',  'ddd',  'xxx' From Dual Union All
          Select 'NY',  'yyy.com',  NULL,     NULL From Dual Union All
          Select 'NY',  'yyy.com',  'eee',  NULL From Dual Union All
          Select 'NY',  'yyy.com',  NULL,     NULL From Dual 
        )
Select    STATE, COMPANY_WEBSITE,
          Count(*) as COMPANY_CNT, 
          Count(Case When IMAGE_1 Is Not Null Then 1 End) as IMG_1_CNT,
          Count(Case When IMAGE_2 Is Not Null Then 1 End) as IMG_2_CNT
From    tbl
Group By  STATE, COMPANY_WEBSITE
/*
ST COMPANY COMPANY_CNT  IMG_1_CNT  IMG_2_CNT
-- ------- ----------- ---------- ----------
NY xxx.com           4          3          2
NY yyy.com           4          2          1  */
© www.soinside.com 2019 - 2024. All rights reserved.