如何基于选择查询的子集进行计数

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

我有一个数据库,该数据库按关联的模型组列出了部件号。大约一半的零件是模型组所独有的。我想知道是否有办法只选择模型组唯一的零件号。

我发现使用以下代码可以很好地解决该问题:

'''

Select Distinct

                            a.*
                            ,b.count
                from
                        (SELECT
                                [PART_NO]
                                ,[Family]
                          FROM [dbo].[Mapping_Perkins_Parts_Series_Models] ) a
                    left join 
                        (SELECT distinct
                                [PART_NO]
                                ,count(part_no) as count
                          FROM [dbo].[Mapping_Perkins_Parts_Series_Models]
                          group by part_no ) b

                on b.PART_NO = a.PART_NO
                where count = 1  

'''

我想知道是否可以在单个select语句而不是嵌套的select语句中执行此操作?我一直遇到的问题是,我必须将组中的所有字段都包括在内,一旦这样做,该零件的任何实例出现两次但具有不同族的情况都被视为唯一记录。

'''

数据集:(零件号,家庭)

  (1, a)
  (1, b)
  (2, a)
  (3, b)
  (4, a)
  (4, b)
  (5, b)
  (6, a)

预期结果:(零件号,家庭)(2,a)(3,b)(5,b)(6,a)

sql count countif
2个回答
0
投票

尝试此:

select * from
(
  select PART_NO,count(distinct Family) PartFamCount
  from [dbo].[Mapping_Perkins_Parts_Series_Models]
  group by PART_NO
)x
where PartFamCount=1

0
投票

如果RDBMS支持窗口功能,则可以在子查询中进行窗口计数,并在外部查询中进行过滤,例如:

SELECT *
FROM (
    SELECT t.*, COUNT(*) OVER(PARTITION BY Part_No) cnt
    FROM mytable t
) x
WHERE cnt = 1
© www.soinside.com 2019 - 2024. All rights reserved.