在SQL中使用where条件对两个聚合查询进行除法?

在SQL中使用where条件对两个聚合查询进行除法?,sql,sql-server,Sql,Sql Server,尝试搜索解决方案,但未找到该解决方案 我需要比较每种车型的缺陷数量和某一类型的缺陷数量,并将其与每种车型的总缺陷数量进行比较,得出缺陷的百分比,例如 select car,count(distinct model) where defect_code=123 group by car select car,count(distinct model) group by car 我将如何编写此查询?最好采用优化的方法 尝试使用Join SELECT car, Df_cnt /

尝试搜索解决方案,但未找到该解决方案

我需要比较每种车型的缺陷数量和某一类型的缺陷数量,并将其与每种车型的总缺陷数量进行比较,得出缺陷的百分比,例如

select car,count(distinct model) 
where defect_code=123 
group by car

select car,count(distinct model) group by car
我将如何编写此查询?最好采用优化的方法

尝试使用Join

SELECT car,
       Df_cnt / T_cnt
FROM   (SELECT car,
               Count(DISTINCT model) Df_cnt From tablename
        WHERE  defect_code = 123
        GROUP  BY car) A
       JOIN (SELECT car,
                    Count(DISTINCT model) T_cnt from tablename
             GROUP  BY car) b
         ON A.car = b.car 

下面是示例代码

SELECT * INTO #TEMP
FROM
(
SELECT 'MARUTI' CAR,'SWIFT' MODEL,123 DEFECT_CODE
UNION ALL
SELECT 'MARUTI' CAR,'ALTO' MODEL,123 DEFECT_CODE
UNION ALL
SELECT 'HYUNDAI' CAR,'ACCENT' MODEL,123 DEFECT_CODE
UNION ALL
SELECT 'NISSAN' CAR,'DATSON' MODEL,123 DEFECT_CODE
UNION ALL
SELECT 'HONDA' CAR,'CITY' MODEL,123 DEFECT_CODE
UNION ALL
SELECT 'HYUNDAI' CAR,'ACCENT' MODEL,115 DEFECT_CODE
UNION ALL
SELECT 'NISSAN' CAR,'DATSON' MODEL,117 DEFECT_CODE
UNION ALL
SELECT 'HONDA' CAR,'CITY' MODEL,118 DEFECT_CODE
)TAB
查询以查找某辆车的缺陷车数量

SELECT  DISTINCT CAR,DEFECT_CODE,COUNT(MODEL) OVER(PARTITION BY CAR) CARCOUNT 
FROM #TEMP
WHERE DEFECT_CODE=123
结果

查询以查找某车型的缺陷车数量

SELECT *,COUNT(MODEL) OVER(PARTITION BY CAR,MODEL) CARMODELCOUNT 
FROM #TEMP
WHERE DEFECT_CODE=123
结果


请提供示例数据错误:子查询返回的值不止一个。@user3512885-My bad未按检查
分组。请尝试新的应答列“B.cnt”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。@user3512885-立即检查表名在哪里?