mysql - 仅当两条或多条记录具有相同值时才连接两个表并进行分组
问题描述
我有 2 张桌子:
manifests
id | customer | paid_order | price | payment_method
paid_orders
id | paid
JOIN paid_orders ON manifests.paid_order = paid_order_id
让我们假设这种情况:
有 2 个相同customer
但有不同的payment_method
.
customer | paid_order | price | payment_method | paid |
1 | 1 | 200 | 0 | 200 |
1 | NULL | 100 | 1 | NULL |
2 | NULL | 150 | 1 | NULL |
我只想GROUP BY customer
而且只有payment_method
当有0
两个相同的客户时才选择。
预期结果:
customer | paid_order | price | payment_method | paid |
1 | 1 | 200 | 0 | 200 |
2 | NULL | 150 | 1 | NULL |
解决方案
一种方法是始终从一个或可能多个payment_method
具有最小值的客户记录中选择记录:
SELECT m1.*
FROM manifest m1
INNER JOIN
(
SELECT customer, MIN(payment_method) AS min_payment_method
FROM manifest
GROUP BY customer
) m2
ON m1.customer = m2.customer AND m1.payment_method = m2.min_payment_method;
这个逻辑应该起作用,因为如果存在payment_method
零,那么这个记录将成为目标。否则,单值记录将成为目标。
推荐阅读
- php - htacess 重写规则在查询字符串中返回错误值
- java - 解析文本文件并删除java中双引号内的逗号
- material-ui - Material UI - 多行 InputBase 的高度在切换宽度时根据行数属性设置为全高
- ios - 尝试替换出现的空格时,字符串中的空格不会注册为空格
- android - 在 RecyclerView 中,在配置更改中保持元素展开/选中
- postman - 在 Postman 中,收到错误“Illegal request-target: Invalid input '|', expected pchar, '/', '?' 或“EOI”(第 1 行,第 97 列)”当我调用 API 时
- button - 使用 kommunicate 在对话流聊天机器人中链接
- jquery - 带有多个级联选择复选框的jquery jsTree
- python - 正则表达式语法中的引号
- java - OSError:[Errno 8] 执行格式错误:'/Users/CodingStark/opt/anaconda3/share/jupyter/kernels/java/ijava-1.3.0.jar'