mysql 在单个查询中计数2个不同的日期字段

rbl8hiat  于 2023-06-04  发布在  Mysql
关注(0)|答案(3)|浏览(164)

我有2个不同的日期字段,1当案件被创建,另一个当案件完成。我试图计算2023年的总病例和总完成病例。
每当我运行查询并设置where字段时,两列都返回相同的数字。

SELECT COUNT(*) AS cases,
       COUNT(IF(YEAR(tbl_lead.CompDate) = '2023', 1, NULL)) AS Completed,
       tbl_lead.LeadSource
FROM tbl_lead
WHERE YEAR(tbl_lead.CompDate) = '2023'
GROUP BY tbl_lead.LeadSource

我想我想做的是把2023年的所有记录都算作案例,然后计算其中有多少在2023年完成。这不可能吗?
它应该输出为:
| 案例展示|已完成|LeadSource|
| - -----|- -----|- -----|
| 一千|五百|谷歌|
| 二千年|七百|Facebook|
而它目前的输出是:
| 案例展示|已完成|LeadSource|
| - -----|- -----|- -----|
| 五百|五百|谷歌|
| 七百|七百|Facebook|
谢谢你

xoshrz7s

xoshrz7s1#

您当前的查询仅引用CompDate,但在您的问题中引用了两个不同的日期列。您正在寻找的页面:

SELECT SUM(CreateDate >= '2023-01-01' AND CreateDate < '2024-01-01') AS cases,
       SUM(CompDate >= '2023-01-01' AND CompDate < '2024-01-01') AS Completed,
       LeadSource
FROM tbl_lead
WHERE (CreateDate >= '2023-01-01' AND CreateDate < '2024-01-01')
   OR (CompDate >= '2023-01-01' AND CompDate < '2024-01-01')
GROUP BY LeadSource
33qvvth1

33qvvth12#

使用这个where条件,查询中的所有行都是在2023年完成的案例(即,匹配if中的条件),因此两个count将返回相同的结果。删除where子句,您应该可以:

Select
    count(*) As cases,
    Count(If(Year(tbl_lead.CompDate) = '2023', 1, Null)) As Completed,
    tbl_lead.LeadSource
From
    tbl_lead
Group By
    tbl_lead.LeadSource
ztmd8pv5

ztmd8pv53#

我认为有一个列(让我们称之为is_completed)指示案例是否完成,在这种情况下,尝试以下操作:

SELECT COUNT(*) AS cases,
       sum(is_completed) AS Completed,
       tbl_lead.LeadSource
FROM tbl_lead
WHERE YEAR(tbl_lead.CompDate) = '2023'
GROUP BY tbl_lead.LeadSource

相关问题