在 db2 上划分计数?
Dividing counts on db2?
您好,我有一个问题,我要计算下载我们应用程序的新员工数量和新员工数量。
我试图将两者相除以找出已下载该应用程序的人所占的百分比
但是每当我 运行 我的查询我的结果是 0
data
和 driver_id
都是 varchar
这是我的查询
SELECT ROUND(COUNT(DATA) / (
SELECT COUNT(D2.DRIVER_ID)
FROM DRIVER D2
WHERE ACTIVE_IN_DISP = 'True'
AND START_DATE >= '10/1/2015'
), 4)
FROM CUSTOM_DATA C
,DRIVER D
WHERE CUSTDEF_ID = '50'
AND SRC_TABLE_KEY = DRIVER_ID
AND ACTIVE_IN_DISP = 'True'
AND START_DATE >= '10/1/2015'
提前致谢!
问题是您正在被截断为 INT
在除法之前将您的数据转换为浮点数
SELECT ROUND( COUNT(DATA) *1.0 /
(SELECT COUNT(D2.DRIVER_ID)
....
只使用条件聚合。更简单,更不容易出错:
SELECT ROUND(AVG(CASE WHEN CUSTDEF_ID = '50' THEN 1.0 ELSE 0
END), 4)
FROM CUSTOM_DATA C JOIN
DRIVER D
ON SRC_TABLE_KEY = DRIVER_ID
WHERE ACTIVE_IN_DISP = 'True' AND
START_DATE >= '2015-10-01';
不必使用子查询重复 WHERE
中的逻辑,使得查询更不容易出错。另外,摆脱子查询也可能更快。
您好,我有一个问题,我要计算下载我们应用程序的新员工数量和新员工数量。
我试图将两者相除以找出已下载该应用程序的人所占的百分比
但是每当我 运行 我的查询我的结果是 0
data
和 driver_id
都是 varchar
这是我的查询
SELECT ROUND(COUNT(DATA) / (
SELECT COUNT(D2.DRIVER_ID)
FROM DRIVER D2
WHERE ACTIVE_IN_DISP = 'True'
AND START_DATE >= '10/1/2015'
), 4)
FROM CUSTOM_DATA C
,DRIVER D
WHERE CUSTDEF_ID = '50'
AND SRC_TABLE_KEY = DRIVER_ID
AND ACTIVE_IN_DISP = 'True'
AND START_DATE >= '10/1/2015'
提前致谢!
问题是您正在被截断为 INT
在除法之前将您的数据转换为浮点数
SELECT ROUND( COUNT(DATA) *1.0 /
(SELECT COUNT(D2.DRIVER_ID)
....
只使用条件聚合。更简单,更不容易出错:
SELECT ROUND(AVG(CASE WHEN CUSTDEF_ID = '50' THEN 1.0 ELSE 0
END), 4)
FROM CUSTOM_DATA C JOIN
DRIVER D
ON SRC_TABLE_KEY = DRIVER_ID
WHERE ACTIVE_IN_DISP = 'True' AND
START_DATE >= '2015-10-01';
不必使用子查询重复 WHERE
中的逻辑,使得查询更不容易出错。另外,摆脱子查询也可能更快。