SQLite:从子查询计算

时间:2018-04-26 03:45:33

标签: sqlite

我有一个问题陈述:10月订购的客户中有哪部分也在9月订购了?

澄清计算应该是这样的。

分子:10月和9月订购的客户数量

分母:10月份订购的客户数量

我已经写了这个查询,但是这给了我1作为答案是错误的。(t1应该是2 customer_id而t2应该是10 customer_id,所以答案应该是 0.2

我无法弄清楚哪个部分给我错误。

select count(t1.customer_id)/count(t2.customer_id)*1.0

from ((SELECT *
       FROM shipping
       WHERE SUBSTR(transaction_date, 1, 2) IN ('09', '10')
       GROUP BY customer_id
       HAVING COUNT(DISTINCT SUBSTR(transaction_date, 1, 2)) = 2) AS t1,

      (SELECT *
       FROM shipping
       WHERE SUBSTR(transaction_date, 1, 2) IN ('10')
       GROUP BY customer_id) AS t2) ; 

2 个答案:

答案 0 :(得分:0)

要进行浮点除法,两个值中的至少一个必须已经是浮点值。最后*1.0进行分割后的转换;你必须早点做到:

select count(t1.customer_id)*1.0/count(t2.customer_id)
...

答案 1 :(得分:0)

为时已晚,但由于我不敢相信尚未回答,我将发布答案:

requests.get("https://example.com/") 
print(time() - t)  # 0.604 s

第一个子查询使用SELECT 1.0 * ( SELECT COUNT() OVER() FROM shipping WHERE SUBSTR(transaction_date, 1, 2) IN ('09', '10') GROUP BY customer_id HAVING COUNT(DISTINCT SUBSTR(transaction_date, 1, 2)) = 2 ) / ( SELECT COUNT(DISTINCT customer_id) FROM shipping WHERE SUBSTR(transaction_date, 1, 2) = ('10') ) percentage 窗口函数计算在10月和9月都订购的不同客户的数量,第二个子查询计算在10月订购的客户的数量
参见简化的demo