首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL多个选择,同一表的Where和Group By

问MYSQL多个选择,同一表的Where和Group By
EN

Stack Overflow用户
提问于 2017-09-28 09:07:38
回答 2查看 33关注 0票数 0

我有两个MYSQL查询,我试图合并成一个,这是第一个-

代码语言:javascript
复制
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

第二个查询与前一天的查询相同。

代码语言:javascript
复制
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

现在我要做的是实现如下的目标(按MYSQL中的别名来表示标题)

代码语言:javascript
复制
| agentname | todaysales | nosales | yesterdaysales | yesterdaynosales |

我已经尝试过使用errors,但是不断地获取SQL错误,我不知道在哪里打开它,这对于复杂的MYSQL查询来说是非常新的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-28 09:16:22

我可以想出一种方法来合并这两个查询,并对结果使用条件聚合。

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2017-09-28 09:21:28

使用条件聚合(即在增益函数(如SUM)中的布尔表达式)。

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46465244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档