mysql - 如何在 mysql 中调整平均值
问题描述
我试图显示我有预订的所有月份,以及每个月的预订/客户的运行平均值,但似乎无法理解这是如何实现的,我不明白为什么我的查询出错。
我尝试了几种方法,一种是组合两个查询的方法,另一种是在一个查询中编写
第一个查询返回我们有订单的所有月份:
SELECT date_format(Orders.ServiceDate, '%y-%b') from Orders
GROUP BY YEAR(Orders.ServiceDate), month(Orders.ServiceDate)
第二个查询是计算每个客户一个月内的平均预订量:
(
SELECT AVG(cc.total) + 1 AS 'avg' FROM (
SELECT Orders.Customer_ID as 'c',
COUNT(BookingId) 'total' from Orders
where year(Orders.ServiceDate) <= '2019' and month(Orders.ServiceDate)
<= '01'
GROUP BY Orders.Customer_ID
) cc
)
最后一个查询给了我一个数字,这是截至 2019 年 1 月之前每位客户的平均预订量,但我需要第一次查询后所有月份的平均值。
但是我需要从第一个查询中获取年份和月份,以便获得每个月的平均值,最终显示如下:
19-Jan 1.5
19-Feb 2
...
...
我尝试加入他们没有运气,所以我希望有一个善良的灵魂可以进一步帮助我。
我尝试的第二件事是不加入这样的查询:
SELECT
date_format(z1.ServiceDate, '%y-%b') as months,
(
SELECT
AVG(cc.total) + 1 AS 'avg'
FROM
(
SELECT
z.Customer_ID,
COUNT(z.BookingId) 'total'
from
Orders z
where
YEAR(z.ServiceDate) <= YEAR(z1.months) AND
MONTH(z.ServiceDate) <= MONTH(z1.months)
GROUP BY
z.Customer_ID
) cc
)
from
Orders z1
GROUP BY
YEAR(z1.ServiceDate),
MONTH(z1.ServiceDate)
这是我的架构:
CREATE TABLE IF NOT EXISTS `orders` (
`BookingId` INT(6) NOT NULL,
`ServiceDate` DATETIME NOT NULL,
`Customer_ID` varchar(1) NOT NULL,
PRIMARY KEY (`BookingId`)
) DEFAULT CHARSET=utf8;
INSERT INTO `orders` (`BookingId`, `ServiceDate`, `Customer_ID`) VALUES
('1', '2019-01-03T12:00:00', '1'),
('2', '2019-01-04T12:00:00', '2'),
('3', '2019-01-12T12:00:00', '2'),
('4', '2019-02-03T12:00:00', '1'),
('5', '2019-02-04T12:00:00', '2'),
('6', '2019-02-012T12:00:00', '3');
我期待看到两个平均值,一个只包含到一月,另一个包含二月,但我不断收到错误:“'where 子句中的未知列'z1.months'”。
我怎样才能使这个查询工作?
解决方案
推荐阅读
- javascript - Discord.js:Linkblocker TypeError:无法读取 null 的属性“角色”
- racket - 解释为什么这个球拍语言代码中的 x 值没有更新?
- flutter - 颤振在特定页面上添加底部导航栏
- python - 如何获得 LassoCV 的一系列分数?
- python - 以 10 秒为周期获取数据帧,并在该时间窗口内获取平均值
- android - 如何使用 android studio 增加第三方软件的麦克风音量
- python - 多指数 Seaborn 线图
- html - 我怎样才能做一个
- 单击时更改颜色并保持该颜色直到重定向?
- javascript - JS 改变 HTML 元素位置后重新渲染 CSS
- amazon-web-services - 亚马逊s3上传是灰色的小方块?