【问题标题】:Include a column to count records with a specific value包含一列以计算具有特定值的记录
【发布时间】:2019-05-21 16:33:34
【问题描述】:

我想返回一个表中的所有数据并附加一个列来计算子集中的记录数(例如,一个社区中的房屋数量)。

我试过了

CASE
    WHEN EXISTS (SELECT 1 as [parcels]
        FROM dbo.parcels p2
        WHERE p2.Neighborhood = p.Neighborhood)
    THEN COUNT([parcels]) END  -- can't count outside subquery
        as [TotalProps]

子查询本身为任何给定社区中的每个属性记录返回值 1,但我无法在 THEN 语句中对子查询之外的 [parcels] 进行计数/求和。

输入表:

dbo.parcels
ID    Address        Neighborhood
==    =======        ============
1     123 Main St    MITO
2     124 Main St    MITO
3     200 2nd St     MITO
4     201 2nd St     MITO
5     5 Park Ave     FAIRWIND
6     1600 Baker St  GALLERY
7     1601 Baker St  GALLERY
8     1602 Baker St  GALLERY

SELECT *, <<<COUNT(neighborhood props)>>> as [TotalProps]
FROM dbo.parcels p

预期输出:

ID    Address        Neighborhood  TotalProps
==    =======        ============  ==========
1     123 Main St    MITO          4
2     124 Main St    MITO          4
3     200 2nd St     MITO          4
4     201 2nd St     MITO          4
5     5 Park Ave     FAIRWIND      1
6     1600 Baker St  GALLERY       3
7     1601 Baker St  GALLERY       3
8     1602 Baker St  GALLERY       3

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    您可以使用 COUNT OVER PARTITION 聚合:

    SELECT
       p.*,
       COUNT(ID) OVER(PARTITION BY Neighborhood) AS TotalProps
    FROM dbo.parcels p
    

    【讨论】:

      【解决方案2】:

      使用窗口函数:

      select p.*, count(*) over (partition by neighborhood)
      from dbo.parcels p;
      

      【讨论】:

      • 很确定你的意思是按社区划分。 :)
      • @SeanLange 。 . .谢谢。
      【解决方案3】:

      保持简单 - 一个基本的子选择将为您提供所需的...

      SELECT
      p.*,
      (
          select count(*)
          FROM dbo.parcels p2
          WHERE p2.neighborhood = p1.neighborhood ) AS hoodcount
      FROM dbo.parcels p
      

      【讨论】:

        猜你喜欢
        • 2012-04-17
        • 1970-01-01
        • 2022-01-13
        • 2013-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-03
        • 1970-01-01
        相关资源
        最近更新 更多