首页 > 解决方案 > 使用聚合的计算列仅返回 1 或 0

问题描述

微软 SQL 服务器 2016

对于分组,我需要找出有多少行具有相同的整数值以及它占总数的百分比(超过某个百分比表示系统中的用户错误)。这是稍后引用的 CTE 的一部分。基础数据的结构为CUSTOMERPRODUCTQUARTER、唯一整数值​​和PRODUCT_COUNT。我的查询:

ISSUES AS(
SELECT 
    CONCAT(CUSTOMER,PRODUCT,QUARTER) AS CUST_PROD_QTR,
    MAX(PRODUCT_COUNT) AS HIGHEST_COUNT,
    SUM(PRODUCT_COUNT) AS TOTAL_COUNT, 
    MAX(PRODUCT_COUNT)/SUM(PRODUCT_COUNT) AS PERC_SAME_INT
FROM ALL_FORECAST
GROUP BY CONCAT(CUSTOMER,PRODUCT,QUARTER)
HAVING SUM(PRODUCT_COUNT)>1 AND MAX(PRODUCT_COUNT)/SUM(PRODUCT_COUNT) > 2/3) 

PERC_SAME_INT似乎只返回 1 或 0。这是由于代码中的结构性原因吗?我需要找到一种方法来限制只有MAX(PRODUCT_COUNT)/SUM(PRODUCT_COUNT) > 2/3.

标签: sqlsql-server

解决方案


错误在此语句中:

HAVING SUM(PRODUCT_COUNT)>1 AND MAX(PRODUCT_COUNT)/SUM(PRODUCT_COUNT) > 2/3) 

在 T-SQL 中,如果整数被除数除以整数除数,则结果是一个整数,结果的任何小数部分都被截断

要正确评估,您需要将除数或除数转换为浮点数,例如:

HAVING SUM(PRODUCT_COUNT)>1 AND (1.0 * MAX(PRODUCT_COUNT))/SUM(PRODUCT_COUNT) > 2.0/3.0) 

推荐阅读