Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在单个查询中对时间范围进行加总并对所有时间进行聚合_Mysql_Sql_Postgresql - Fatal编程技术网

Mysql 在单个查询中对时间范围进行加总并对所有时间进行聚合

Mysql 在单个查询中对时间范围进行加总并对所有时间进行聚合,mysql,sql,postgresql,Mysql,Sql,Postgresql,我被要求编写一个与MySQL/PostgreSQL兼容的单一查询,显示某个销售代表在给定月份的总销售额(sales\u rephere),并在另一列中显示同一个人全年的平均月销售额。到目前为止,我提出的问题如下: 选择sr.name,总和(s.amount)作为总计?? 来自销售代表(作为销售代表),销售代表(作为销售代表) 其中sr.id=s.sales\u rep\u id 和s.date>=“2000-12-01” 和s.日期=“2000-12-01” 和s.日期

我被要求编写一个与MySQL/PostgreSQL兼容的单一查询,显示某个销售代表在给定月份的总销售额(
sales\u rep
here),并在另一列中显示同一个人全年的平均月销售额。到目前为止,我提出的问题如下:

选择sr.name,总和(s.amount)作为总计??
来自销售代表(作为销售代表),销售代表(作为销售代表)
其中sr.id=s.sales\u rep\u id
和s.date>=“2000-12-01”
和s.日期<'2001-01-01'
按sr.name分组
按总说明订购
限制10;
您可以在这里尝试:

为此:

FROM sales_rep as sr
join sales as s
on sr.id = s.sales_rep_id
最后,在您限制前100个之前,按数量或平均值而不是按名称订购是有意义的。因此,该解决方案:

SELECT sr.name as name, SUM(s.amount) as total, avg(s.amount) as average
FROM sales_rep as sr, sales as s
WHERE sr.id = s.sales_rep_id
AND s.date >= '2000-12-01' 
AND s.date < '2001-01-01'
GROUP BY sr.name
order by total
limit 100;
选择sr.name作为名称,SUM(s.amount)作为总计,avg(s.amount)作为平均值
来自销售代表(作为销售代表),销售代表(作为销售代表)
其中sr.id=s.sales\u rep\u id
和s.date>=“2000-12-01”
和s.日期<'2001-01-01'
按sr.name分组
按总数排序
上限为100;

您可以使用窗口功能:

SELECT YEAR(s.date), MONTH(s.date), sr.name, SUM(s.amount) as total, 
       SUM(SUM(s.amount)) OVER () / 12 as monthly_average
FROM sales_rep sr JOIN
     sales s
     ON sr.id = s.sales_rep_id
WHERE s.date >= '2000-12-01' AND s.date < '2001-01-01'
GROUP BY sr.name, YEAR(s.date), MONTH(s.date);

公平投票,我同意。我正在编辑。。。我还是。。。再一次。。。我同意。。。Thanks@LearnerFor-生活请告诉我这里出了什么问题,这样我可以做得更好。全年的月平均销售额是错误的。对于所有在那里的用户,它将是50。(100+500)/12和(100+200+300)/12Hi@learnerforlife这样行吗:我们都会犯那些看似无关紧要的错误,我当然也有自己的一份(也许更多)。只是希望他们在把一个小错误变成一个大问题之前被抓住。在他们到达“提问”页面之前,最好让新生通过MCRE(以及类似的)页面@草莓口味的。@nnn要是……我不知道这是可能的。我现在用它来更新我的问题。既然我已经更新了问题,@nnn能提供答案吗?如果答案(非窗口功能)不能为您提供解决方案,我会回答。查询不起作用,我不允许每年和每月返回。
SELECT sr.name as name, SUM(s.amount) as total, avg(s.amount) as average
FROM sales_rep as sr, sales as s
WHERE sr.id = s.sales_rep_id
AND s.date >= '2000-12-01' 
AND s.date < '2001-01-01'
GROUP BY sr.name
order by total
limit 100;
SELECT YEAR(s.date), MONTH(s.date), sr.name, SUM(s.amount) as total, 
       SUM(SUM(s.amount)) OVER () / 12 as monthly_average
FROM sales_rep sr JOIN
     sales s
     ON sr.id = s.sales_rep_id
WHERE s.date >= '2000-12-01' AND s.date < '2001-01-01'
GROUP BY sr.name, YEAR(s.date), MONTH(s.date);
SELECT YEAR(s.date), MONTH(s.date), sr.name, SUM(s.amount) as total, 
       AVG(SUM(s.amount)) OVER () as monthly_average
FROM sales_rep sr JOIN
     sales s
     ON sr.id = s.sales_rep_id
WHERE s.date >= '2000-12-01' AND s.date < '2001-01-01'
GROUP BY sr.name, YEAR(s.date), MONTH(s.date);