你好,我有一个查询,我将拉下已经下载我们的应用程序的新员工的数量和新员工的数量。
我正在尝试将两者分开以找到已下载应用程序的人的百分比
但每当我运行查询时,结果为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'
提前谢谢!
答案 0 :(得分:1)
问题是你被截断到INT
在分割之前将数据转换为浮动
SELECT ROUND( COUNT(DATA) *1.0 /
(SELECT COUNT(D2.DRIVER_ID)
....
答案 1 :(得分:1)
只需使用条件聚合。它更容易,更不容易出错:
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
中的逻辑,使查询更不容易出错。另外,也可以更快地摆脱子查询。