简体   繁体   English

MYSQL多个选择,同一表的位置和分组依据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM