根据不同的条件对不同表的列进行计数,并按通用列联接SQL进行分组

问题描述

我有两个表,我希望根据某些条件在其中查找特定列的计数。 (在Zoho Analytics上实现)

基本上:

  1. table1:计算行,其中名为calltype的列的字段值为demo
  2. table2:计算行,其中名为customertype的列的字段值为0
  3. 基于两个日期中都存在的日期列对月份进行分组结果

我尝试使用sumcase,但是它没有返回正确的值-

SELECT
         absmonth(A."Call Date") as Period,SUM(CASE WHEN A."Call Type"  = 'Demo' THEN 1 ELSE 0 END) AS TotalDemos,absmonth(B."modified") as Period1,SUM(CASE WHEN B."customertype"  = 0 THEN 1 ELSE 0 END) AS TotalTrials
FROM  "customer_calls" AS  A,"users" AS  B 
WHERE    B."modified"  = A."Call Date"
GROUP BY Period,Period1

但是,我有用于从各个表中计算出每个计数值的代码,这些代码可以完美地给出结果-

表1

 SELECT
             absmonth("Call Date") as Period,Count("Call Type") as Total
    FROM  "customer_calls" 
    WHERE    "Call Type"  = 'Demo'
    GROUP BY  Period 

表2(我本来可以避免使用大写字母,但想检查它是否给出正确的结果,并且确实如此)

SELECT
         absmonth(B."modified") as Period1,SUM(CASE WHEN B."customertype"  = 0 THEN 1 ELSE 0 END) AS TrialCount
FROM  "users" AS  B 
GROUP BY  Period1 

基本上,作为最终结果,我想按月找到TotalDemos与TotalTrials的比率。有人可以指出我在第一个代码中出了什么问题吗?

解决方法

基本上,作为最终结果,我想按月找到TotalDemos与TotalTrials的比率。

尝试使用union all,然后汇总:

select period,sum(num_demos),sum(num_trials),sum(num_demos) * 1.0 / sum(num_trials)
from ((select absmonth("Call Date") as Period,Count(*) as num_demos,0 as num_trials
       from "customer_calls" 
       where "Call Type"  = 'Demo'
       group by Period 
      ) union all
      (select absmonth(u."modified") as Period,count(*) as num_trials
       from  "users" u
       where u."customertype"  = 0
       group by Period
      )
     ) dt
group by period;

我已经使用了查询的结构。例如,我从未听说过一个名为absmonth()的函数。但这应该使您知道该怎么做。

我要提醒您,您不仅要查询该月份,还需要一个月。您还应该考虑年份。