You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL技术问询:如何用不同WHERE条件从同一列取值并合并结果

合并潜在客户统计查询的解决方案

嗨,我来帮你搞定这个问题!其实你不需要用JOIN、UNION或者复杂的子查询,用条件聚合就能一次性得到你想要的结果——同时统计每月总潜在客户数和Rent类潜在客户数,而且只需要扫描一次数据表,性能更优。

最终SQL查询代码

SELECT 
    TO_CHAR(a.created_at, 'YYYY.MM') AS Datum,
    COUNT(DISTINCT a.lead_demand_user_id) AS Total_Leads,
    COUNT(DISTINCT CASE WHEN a.service IN ('Leads::Rent') THEN a.lead_demand_user_id END) AS Rent_Leads
FROM leads a 
WHERE 
    DATE(a.created_at) BETWEEN '2017-06-01' AND CURRENT_DATE
    AND a.lead_delivery_time IS NOT NULL 
    AND a.lead_filler IN ('Android', 'iOS', 'MobileWeb', 'Web')
GROUP BY 1
ORDER BY 1;

代码说明

  • Total_Leads:和你原来的第一个查询逻辑完全一致,统计所有符合筛选条件的去重潜在客户ID数量。
  • Rent_Leads:用CASE WHEN精准筛选出service为Leads::Rent的记录,只对这些记录的lead_demand_user_id进行去重计数;不符合条件的记录会返回NULL,而COUNT函数会自动忽略NULL值,正好匹配我们的统计需求。
  • 把原来的'TODAY'换成了CURRENT_DATE,这是标准SQL中获取当前日期的写法,比字符串常量更可靠(部分数据库对'TODAY'的支持存在差异)。
  • 最后加上ORDER BY 1可以让结果按月份顺序排列,查看起来更直观。

这个方法的核心优势在于只需要对leads表做一次全扫描,比分开执行两次查询或者用JOIN关联结果集的效率高很多,尤其是在数据表数据量较大的时候。

内容的提问来源于stack exchange,提问作者user3441346

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:37:29