sql - 使用聚合的计算列仅返回 1 或 0
问题描述
微软 SQL 服务器 2016
对于分组,我需要找出有多少行具有相同的整数值以及它占总数的百分比(超过某个百分比表示系统中的用户错误)。这是稍后引用的 CTE 的一部分。基础数据的结构为CUSTOMER
、PRODUCT
、QUARTER
、唯一整数值和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
.
解决方案
错误在此语句中:
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)
推荐阅读
- identityserver4 - Blazor、IdentityServer4 和多租户
- javascript - 如何在 JS 中使用 XMLHttpRequest 读取文件
- recursion - Lisp 中的偶数最大值
- json - 用jq获取json数据的第一个元素
- java - 尝试在 tomcat 中显示某些内容时出现错误 404
- vb.net - Vb数学计算不正确的结果
- ios - Swift - 获得一对多的关系
- php - 为给定顶级类别的所有子类别禁用特定的 WooCommerce 付款方式
- bash - .bashrc 命令正在回显到终端。我能阻止这个吗
- c++ - vscode c ++中的分段错误