2015-11-20 44 views
0

你好我有一个查询,我拉我的应用程序和新员工人数新雇员的人数。划分db2的计数?

我想分两个找到那些谁已经下载了应用程序的百分比

但每当我跑我的查询我的结果是0 既datadriver_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

我忘记提及数据的计数是10并且driver_id的计数是64 – OVO

+0

请注意,顺便提一下,隐式连接(在from子句中有两个表)是一个不赞成的语法,建议切换到现代的显式语法: 了解如何使用显式连接语法。亚伦伯特兰做了一些[**写作**](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx)关于它 –

+0

感谢DUDE !!!!! – OVO

回答

1

问题是你得到截断为INT

转换您的数据划分

SELECT ROUND( COUNT(DATA) *1.0/
       (SELECT COUNT(D2.DRIVER_ID) 
       .... 
+0

感谢兄弟工作就像一个魅力 – OVO

+0

记得接受这个答案,如果你的问题帮助你 –

+0

我想我但我必须等待30秒我一直来回来确保我给你信贷你应得的! – OVO

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使得查询更容易出错。另外,摆脱子查询可能也更快。