2011-10-05 318 views
5

这里的查询:计算百分比SQLite中

select 
(
SELECT  COUNT(*) 
FROM   Sending s 
WHERE  (ConfID = 1) AND (Status = 1) 
) 
/
(
(
SELECT  COUNT(*) 
FROM   Numbers 
WHERE  (ConfID = 1) 
) 
/
100 
) 

我想计算个百分点。例如,如果查询

SELECT  COUNT(*) 
    FROM   Numbers 
    WHERE  (ConfID = 1) 

给100和彼此

SELECT  COUNT(*) 
    FROM   Sending s 
    WHERE  (ConfID = 1) AND (Status = 1) 

结果50结果查询应该返回50,这意味着50%。但是,第一个查询结果2和第二个返回10000结果查询返回0.我想我应该定义某种方式返回浮点数等。

谢谢!

+1

你尝试(100 * FIRST_QUERY)/ SECOND_QUERY? –

+0

@Laurent'(100 * FIRST_QUERY)/ SECOND_QUERY'与'(FIRST_QUERY)/(SECOND_QUERY/100)'是否相同? –

+1

@Benoit我知道,看看我的答案。 Laurent的建议也没有效果(请看EmptyStack的回答和OP的评论)。我的观点是:即使洛朗的建议奏效了,也会产生误导。不要重复你的数学来试图欺骗数据类型。改用正确的数据类型。 –

回答

7

尝试除以100.0而不是100。这将迫使强制转换为浮点数据类型:

select 
(
SELECT  COUNT(*) 
FROM   Sending s 
WHERE  (ConfID = 1) AND (Status = 1) 
) 
/
(
(
SELECT  COUNT(*) 
FROM   Numbers 
WHERE  (ConfID = 1) 
) 
/
100.0 
) 
+0

Diamond!明确表示我需要!非常感谢! – kseen

0

尝试:

SELECT SUM(CASE status WHEN 1 THEN 100 ELSE 0 END)/COUNT(*) 
    FROM numbers 
WHERE confid = 1 
+1

这也是我最初的想法,问题在于OP从2个不同的表中选择 –

+0

您已经总结了100个。但是,您的结果分区将是“200/10000 = 0.02”,其整数部分将舍入为“0”。你需要总结'100.0' –

+0

@Adrian:除非我想要一个四舍五入为整数的值(通常这对用户来说是足够的反馈)。否则你是对的! – Benoit