Mysql 将查询合并到一个数据库中
我有两个查询,我和UNION ALL一起计算,一个是移动潜在客户,另一个是网络潜在客户。但不确定如何将两个结果合并为一个。我的问题是:Mysql 将查询合并到一个数据库中,mysql,Mysql,我有两个查询,我和UNION ALL一起计算,一个是移动潜在客户,另一个是网络潜在客户。但不确定如何将两个结果合并为一个。我的问题是: SELECT CAST( submitdate AS DATE ) as submitdate, COUNT( DISTINCT name, email, phone, `make` , `model` , `mdlyr` , `miles` ) AS webcount FROM leads WHERE email <> '' and mobil
SELECT CAST( submitdate AS DATE ) as submitdate, COUNT( DISTINCT name, email, phone, `make` , `model` , `mdlyr` , `miles` ) AS webcount FROM leads WHERE email <> '' and mobile = '0' GROUP BY CAST( submitdate AS DATE )
UNION ALL
SELECT CAST( submitdate AS DATE ) as submitdate, COUNT( DISTINCT name, email, phone, `make` , `model` , `mdlyr` , `miles` ) AS mobilecount FROM leads WHERE email <> '' and mobile = '1' GROUP BY CAST( submitdate AS DATE )
当我试图让它看起来像这样时:
submitdate | webcount
2014-03-19 | 30
2014-03-19 | 15
2014-03-18 | 59
2014-03-18 | 37
submitdate | webcount | mobilecount
2014-03-19 | 30 | 15
2014-03-18 | 59 | 37
我做错了什么?这里有一个轴心方法。使用您的联合,但作为预查询。我添加了一个额外的列,通过一个字符将源代码标识为web或mobile。因此,我在外部级别使用它,并按日期进行分组,但任何计数的总和,但仅基于web或移动标志值
select
PQ.submitdate,
sum( case when PQ.leadOrigin = 'W' then PQ.DateCnt else 0 end ) as WebCount,
sum( case when PQ.leadOrigin = 'M' then PQ.DateCnt else 0 end ) as MobileCount
from
( SELECT
CAST( submitdate AS DATE ) as submitdate,
MAX( 'W' ) as leadOrigin,
COUNT( DISTINCT name, email, phone, `make` , `model` , `mdlyr` , `miles` ) AS DateCnt
FROM
leads
WHERE
email <> ''
and mobile = '0'
GROUP BY
CAST( submitdate AS DATE )
UNION ALL
SELECT
CAST( submitdate AS DATE ) as submitdate,
MAX( 'M' ) as leadOrigin,
COUNT( DISTINCT name, email, phone, `make` , `model` , `mdlyr` , `miles` ) AS DateCnt
FROM
leads
WHERE email <> ''
and mobile = '1'
GROUP BY CAST( submitdate AS DATE ) ) PQ
group by
PQ.submitdate
我可以进行以下查询:
SELECT a.submitdate, b.webcount, c.mobilecount
FROM (
SELECT DISTINCT CAST( submitdate AS DATE ) AS submitdate FROM leads) AS a
INNER JOIN
(SELECT CAST( submitdate AS DATE ) AS submitdate, COUNT( DISTINCT name, email, phone, `make` , `model` , `mdlyr` , `miles` ) AS webcount FROM leads WHERE email <> '' AND mobile = '0' GROUP BY CAST( submitdate AS DATE )) AS b ON a.submitdate = b.submitdate
INNER JOIN
(SELECT CAST( submitdate AS DATE ) AS submitdate, COUNT( DISTINCT name, email, phone, `make` , `model` , `mdlyr` , `miles` ) AS mobilecount FROM leads WHERE email <> '' AND mobile = '1' GROUP BY CAST( submitdate AS DATE )) AS c ON b.submitdate = c.submitdate
ORDER BY a.submitdate DESC
但它只给出了2014年3月16日的日期,当时手机的计数高于0。是否需要添加一些内容,包括所有日期,如果没有,则默认为0?我在尝试时收到此错误:1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第行使用near'as WebCount,sum case when PQ.leadOrigin='M'然后PQ.DateCnt else 0'的正确语法3@NickCurran,错过了SUM中case/when子句的结尾。我会更多地阅读这篇文章,并记下你是如何做到的,以备将来参考。再次感谢!有一个问题,我会在两个总数的周围加上一个总数,还是做第三种情况并去掉mobile=part更好?@NickCurran,如果你想得到mobile和web的总数,你只需添加另一列sum PQ.DateCnt作为OverallTotal