如何使用不同的where语句从同一列中选择值-sql

uqxowvwt  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(350)

我有以下代码。

SELECT
 TO_CHAR(a.created_at, 'YYYY.MM') AS Datum,
 count(distinct(a.lead_demand_user_id)) AS Total_Leads
FROM
 leads a
WHERE
 date(a.created_at) BETWEEN '2017-06-01'
 AND 'TODAY' 
 AND a.lead_delivery_time IS NOT NULL
 AND a.lead_filler IN ('Android', 'iOS', 'MobileWeb', 'Web')
GROUP BY 1

上面的查询提供了每月的线索。
然后我有另一个查询,它只提供“租金”线索。

SELECT
 TO_CHAR(a.created_at, 'YYYY.MM') AS Datum,
 count(distinct(a.lead_demand_user_id)) AS Rent_Leads
FROM
 leads a
WHERE
 date(a.created_at) BETWEEN '2017-06-01'
 AND 'TODAY' 
 AND a.lead_delivery_time IS NOT NULL
 AND a.lead_filler IN ('Android', 'iOS', 'MobileWeb', 'Web')
 AND a.service IN ('Leads::Rent')
GROUP BY 1

现在我可以创建两个单独的查询,但是我希望这两个值都通过一个查询以以下格式显示
月->总潜在客户->租赁潜在客户
我试过使用,连接,联合,子查询,但是没有得到想要的数据。

pkmbmrz7

pkmbmrz71#

这个怎么样:

SELECT t1.Datum AS Month, t1.Total_Leads AS Total, t2.Rent_Leads AS Rent 
FROM (SELECT * FROM (SELECT TO_CHAR(a.created_at, 'YYYY.MM') AS Datum, count(distinct(a.lead_demand_user_id)) AS Total_Leads
                     FROM leads a
                     WHERE date(a.created_at) BETWEEN '2017-06-01'
                     AND 'TODAY' 
                     AND a.lead_delivery_time IS NOT NULL
                     AND a.lead_filler IN ('Android', 'iOS', 'MobileWeb', 'Web')) AS x
      GROUP BY 1         
     ) AS t1
INNER JOIN (SELECT * FROM (SELECT TO_CHAR(b.created_at, 'YYYY.MM') AS Datum, count(distinct(b.lead_demand_user_id)) AS Rent_Leads
                           FROM leads b
                           WHERE date(b.created_at) BETWEEN '2017-06-01'
                           AND 'TODAY' 
                           AND b.lead_delivery_time IS NOT NULL
                           AND b.lead_filler IN ('Android', 'iOS', 'MobileWeb', 'Web')
                           AND b.service IN ('Leads::Rent')) AS y
            GROUP BY 1
           ) AS t2
ON t1.Datum = t2.Datum;
epfja78i

epfja78i2#

我在这种情况下使用的一个选项是使用union:
使用您的第一个查询作为

SELECT
 TO_CHAR(a.created_at, 'YYYY.MM') AS Datum,
 count(distinct(a.lead_demand_user_id)) AS Total_Leads, 0 as Rent_leads...

把这个和你的第二个身份结合起来

SELECT
 TO_CHAR(a.created_at, 'YYYY.MM') AS Datum,
 0 as Total_Leads,
 count(distinct(a.lead_demand_user_id)) AS Rent_Leads...

这是可行的,但意味着您可以有效地读取主表两次,另一种方法是使用不计算空值的事实。我假设lead\u demand\u user\u id是一个数字。在oracle中,您可以使用 Decode(a.service,'Leads::Rent',1,null) 创建1或null。然后 count (distinct(a.lead_demand_user_id)*Decode(a.service,'Leads::Rent',1,null)) as Rent_Leads 我不确定解码是否在其他sql中可用。
希望这有帮助
斯蒂芬l。李

pb3skfrl

pb3skfrl3#

试试这个:

SELECT
   TO_CHAR(a.created_at, 'YYYY.MM') AS Datum,
   count(distinct(a.lead_demand_user_id)) AS Total_Leads,
   sum(case when a.service IN ('Leads::Rent') then 1 else 0 end) AS Rent_Leads
FROM leads a
WHERE date(a.created_at) BETWEEN '2017-06-01'
AND 'TODAY' 
AND a.lead_delivery_time IS NOT NULL
AND a.lead_filler IN ('Android', 'iOS', 'MobileWeb', 'Web')
GROUP BY 1

相关问题