【问题标题】:Count columns of different tables based on different criteria and group by a common column join (SQL)根据不同的条件对不同表的列进行计数,并通过公共列连接 (SQL) 进行分组
【发布时间】:2020-12-08 14:16:45
【问题描述】:

我有两个表,我想根据某些条件在其中查找特定列的计数。 (在 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 

Table2(我本可以在这里避免 sumcase,但想检查它是否给出了正确的结果并且确实如此)

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 的比率。有人能指出我在第一个代码中哪里出错了吗?

【问题讨论】:

  • 不知道为什么有人投了反对票。试图尽可能详细。让我知道是否有人需要更多详细信息。我是新来的。
  • 我删除了不一致的数据库标签。请仅使用您真正使用的数据库进行标记。此外,样本数据和所需结果也会有所帮助。
  • zoho 标签对研究absmonth() 函数很有用。
  • @GordonLinoff - 请记住这一点。谢谢。正如 Sander 所提到的,我在处理 Zoho Analytics 时添加了 Zoho 标签(编辑后在问题中也提到了这一点)。

标签: sql zoho


【解决方案1】:

作为最终结果,我想按月计算 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,
              0, count(*) as num_trials
       from  "users" u
       where u."customertype"  = 0
       group by Period
      )
     ) dt
group by period;

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

我会提醒您,您不只希望月份进行此类查询;您还应该将年份考虑在内。

【讨论】:

  • absmonth() 函数记录在 here。它似乎返回了格式化的 [月、年] 组合。
  • 无论如何,过一段时间会测试一下,让你知道它是否有效。感谢您的帮助:)
  • @Gordon 附带说明一下,为什么不能在这里使用联接? (您使用 Union 的任何特殊原因?)
  • @Rakshit 。 . . JOIN 也可以,但如果演示或试用中可能缺少给定月份,则需要 FULL JOIN
  • @GordonLinoff 这行得通。也感谢您的澄清。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
  • 2021-12-12
  • 1970-01-01
相关资源
最近更新 更多