[英]MYSQL Multiple Selects, Where and Group By for Same Table
I have two MYSQL queries that i am trying to merge into one, here is the first one - 我有两个要合并为一个的MYSQL查询,这是第一个-
SELECT
`Your_Name` as agentname,
sum(`Sale_Amount`) as todaysales,
COUNT(*) as NoSales
FROM mp_wp_sales_tracking
WHERE `created` BETWEEN CURDATE() AND NOW()
GROUP BY agentname
And the second one is the same query, just for the previous day 第二个是相同的查询,只是针对前一天
SELECT
`Your_Name` as agentname,
sum(`Sale_Amount`) as yesterdaysales,
COUNT(*) as YesterdayNoSales
FROM mp_wp_sales_tracking
WHERE `created` BETWEEN DATE_SUB(CURDATE(),INTERVAL 1 DAY)
AND ADDTIME(DATE_SUB(CURDATE(),INTERVAL 1 DAY),'23:59:59.50')
GROUP BY agentname
Now what i am trying to do, is achieve something like below (Headers as per aliases in MYSQL) 现在我想做的是实现如下所示的内容(MYSQL中每个别名的标题)
| agentname | todaysales | nosales | yesterdaysales | yesterdaynosales |
I have already tried to use Inner Join, but keep getting SQL errors, i am not sure where to turn on this, being quite new to complex MYSQL queries. 我已经尝试过使用内部联接,但是不断出现SQL错误,我不确定在哪里打开它,对于复杂的MYSQL查询来说还是很新的。
I can think of one way to merge these 2 queries and use conditional aggregation for the results 我可以想到一种合并这两个查询并为结果使用条件聚合的方法
SELECT `Your_Name` as agentname,
SUM( CASE WHEN
`created` BETWEEN DATE_SUB(CURDATE(),INTERVAL 1 DAY) AND ADDTIME(DATE_SUB(CURDATE(),INTERVAL 1 DAY),'23:59:59.50')
THEN `Sale_Amount`
ELSE 0 END
) as yesterdaysales,
SUM(`created` BETWEEN DATE_SUB(CURDATE(),INTERVAL 1 DAY) AND ADDTIME(DATE_SUB(CURDATE(),INTERVAL 1 DAY),'23:59:59.50') ) as YesterdayNoSales ,
SUM(CASE WHEN
`created` BETWEEN CURDATE() AND NOW()
THEN `Sale_Amount`
ELSE 0 END
) as todaysales,
SUM(`created` BETWEEN CURDATE() AND NOW() ) as NoSales
FROM mp_wp_sales_tracking
WHERE `created` BETWEEN DATE_SUB(CURDATE(),INTERVAL 1 DAY) AND ADDTIME(DATE_SUB(CURDATE(),INTERVAL 1 DAY),'23:59:59.50')
OR `created` BETWEEN CURDATE() AND NOW()
GROUP BY agentname
Use conditional aggregation (ie boolean expressions inside an aggragtion function such as SUM
). 使用条件聚集(即,诸如
SUM
的聚集函数内的布尔表达式)。
select
your_name as agentname,
sum(case when date(created) = curdate() then sale_amount end) as todaysales,
sum(date(created) = curdate()) as todaynosales,
sum(case when date(created) = curdate() - interval 1 day then sale_amount end)
as yesterdaysales,
sum(date(created) = curdate() - interval 1 day) as yesterdaynosales
from mp_wp_sales_tracking
where created >= curdate() - interval 1 day
group by agentname
order by agentname;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.