mysql - 计算所选数据mysql的平均值
问题描述
我有一个名为 order_star_member 的数据用户,其中包含此详细信息,user_id 作为 id 用户,createdAt 作为交易开始,total_price_star_member 作为每个用户的交易金额。
CREATE TABLE order_star_member
( users_id INT
, createdAt DATE
, total_price_star_member DECIMAL(10,2)
);
INSERT INTO order_star_member VALUES
(12,'2019-01-01',100000),
(12,'2019-01-10',100000),
(12,'2019-01-20',100000),
(12,'2019-02-10',100000),
(12,'2019-02-15',300000),
(12,'2019-02-21',500000),
(13,'2019-01-02',900000),
(13,'2019-01-11',300000),
(13,'2019-01-18',400000),
(13,'2019-02-06',100000),
(13,'2019-02-08',900000),
(13,'2019-02-14',400000),
(14,'2019-01-21',500000),
(14,'2019-01-23',200000),
(14,'2019-01-24',300000),
(14,'2019-02-08',100000),
(14,'2019-02-09',200000),
(14,'2019-02-14',100000),
(15, '2019-03-04',1000000),
(14, '2019-03-04', 300000),
(14, '2019-03-04', 350000),
(13, '2019-03-04', 400000),
(15, '2019-01-23', 620000),
(15, '2019-02-01', 650000),
(12, '2019-03-03', 750000),
(16, '2019-03-04', 650000),
(17, '2019-03-03', 670000),
(18, '2019-02-02', 450000),
(19, '2019-03-03', 750000);
我在 1 月份将数据用户分开进行交易,总交易量 >= 600.000
select * from order_star_member where monthname(createdAt) = 'January'
having sum(total_price_star_member) >= 600000;
结果是这样的
+----------+-------------------------+
| users_id | total_price_star_member |
+----------+-------------------------+
| 13 | 1.600.000 |
| 14 | 1.000.000 |
| 15 | 620.000 |
+----------+-------------------------+
我想选择 1 月份总交易量 >= 600.000 的用户以及该数据用户交易的平均值。我用了这个查询
select avg(total_price_star_member) from
(select users_Id, total_price_star_member
from order_star_member
where monthname(createdAt) = 'January'
group by users_id
having sum(total_price_star_member) >= 600000) a;
但是为什么结果平均值是用户总数而不是仅在每个用户一月份的总交易量> = 600.000时才计算平均值
平均值应该是 1.073.000 但是为什么我使用那个查询为什么结果是 673.333
解决方案
最简单的答案可能类似于以下内容(使用临时表)。由于 MySql(不在 MariaDB 中)存在临时表问题,我们需要创建其中两个:
create temporary table tmpInfo1 as
select users_id, sum(total_price_star_member) userSum
from order_star_member
where monthname(createdAt) = 'January'
group by users_id
having sum(total_price_star_member) >= 600000;
create temporary table tmpInfo2 as select * from tmpInfo1;
select users_id,
userSum,
(select avg(userSum) from tmpInfo2)
from tmpInfo1;
drop table tmpInfo1;
drop table tmpInfo2;
推荐阅读
- python - 如何让我的代码根据用户输入重新启动?
- amazon-web-services - SageMaker object2vec - 如何下载模型工件并在本地使用?
- visual-studio-code - 在 chrome 中打开带有 multilpe 配置文件的链接
- c# - 如何从字符串创建 LambdaExpression?
- javascript - React-Select 重复项和用例
- react-native - 带有 NativeBase 工厂的 Expo Ionicons 的道具类型
- android - 在颤动中实现实时推送通知 - 用于订购目的
- android - 如何在另一个 kotlin 文件中导入所有顶级函数
- python - 对于某些迭代,for 循环返回 None
- python - 访问装饰函数的文档?