mysql - 我无法在 mysql 中加入没有重复的两个表
问题描述
我有两张桌子:
- 成员(member_id,member_gender)
- 订单(order_id、member_id、order_amount)我必须检索有关会员数量、买家数量(至少有 1 个订单的会员)、订单数量的数据但不幸的是我很难,因为当我尝试加入这两个表时我收到了重复,我无法计算独特的成员所以我的初始代码是:
SELECT count(m.member_id) AS Amount_of_members ,count(o.order_id) ,sum(o.order_amount) FROM tbl_member m LEFT JOIN tbl_order o ON m.member_id = o.member_id
解决方案
您可以要求数据库仅计算成员 ID 的唯一出现次数
SELECT count(DISTINCT m.member_id) AS Amount_of_members
您还可以运行子查询将订单分组,以便在加入成员表之前每个成员只有一行,这意味着如果成员有 2 个订单,则成员数据不会加倍,如果有,则增加三倍3等
SELECT
count(m.member_id) AS Amount_of_members ,
sum(x.count_orders) as total_count_of_orders,
sum(x.sum_orders) as total_sum_of_orders
FROM
tbl_member m
LEFT JOIN (
SELECT
o.member_id,
count(o.order_id) as count_orders ,
sum(o.order_amount) as sum_orders
FROM
tbl_order o
GROUP BY o.member_id
)x ON m.member_id = x.member_id
通常,“在连接完成之前将 1:M 关系的多方压缩为一行”是管理数据的有用方法,尤其是在需要进行多个连接的情况下。以 1:1 获得所有内容意味着不会弹出重复项
推荐阅读
- javascript - 返回存储数据时出现 TypeError
- regex - 如何在 Notepad++ 中将连字符与正则表达式合并?
- kotlin - 迭代器的运算符符号 - Kotlin
- java - Harmony OS 中 Android OS 中 ViewParent.requestDisallowInterceptTouchEvent() 的替代方法是什么?
- excel - 突出显示包含越南语单词的短语
- c# - Automapper ConstructUsing 和 Profile
- javascript - 查找嵌套 JavaScript 对象中空属性的长度
- java - 我如何在java中使用groupingby
- r - 基于字符串列表输出公式
- c++ - 如何创建一个包含 int 和字符串的向量?