mysql - Mysql按列分组并最好在另一列值上获取最大ID
问题描述
我有一张包含这样内容的表格;
id customer is_default
1606384 5828 1
1573786 5828 0
1575316 5828 0
1817769 5828 0
对于这个客户,有一个is_default=1地址,但其他一些则没有。例如;
id customer is_default
1806384 5829 0
1873786 5829 0
1875316 5829 0
1917769 5829 0
我想获得MAX(id)但查询应该首先首选is_default= 1
例如,在第一个表中查询必须返回MAX(id) = 1606384,第二个表应该返回MAX(id) = 1917769
我无法解决这个问题。
你们能帮帮我吗?
编辑 1
回应@Strawberry 的评论
我试过这种方法;
首先,我将is_default与id和 order 相乘,以便从查询中获取最大 id。但这一切都是错误的,因为我现在明白了
SELECT MAX(id) as mid,MAX(is_default)
FROM (
(SELECT rel.maxid as id,customer,is_default FROM (
select (id+(is_default*10000000)) as maxid,customer,is_default FROM customer_address ORDER BY is_default DESC) rel ORDER BY maxid)
) rel
GROUP BY customer
解决方案
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(id SERIAL PRIMARY KEY
,customer INT NOT NULL
,is_default TINYINT NOT NULL
);
INSERT INTO my_table VALUES
(1606384,5828,1),
(1573786,5828,0),
(1575316,5828,0),
(1817769,5828,0),
(1806384,5829,0),
(1873786,5829,0),
(1875316,5829,0),
(1917769,5829,0);
SELECT x.customer
, COALESCE(MAX(y.id),MAX(x.id)) id
FROM my_table x
LEFT
JOIN my_table y
ON y.customer = x.customer
AND y.is_default = 1
GROUP
BY x.customer;
+----------+---------+
| customer | id |
+----------+---------+
| 5828 | 1606384 |
| 5829 | 1917769 |
+----------+---------+
推荐阅读
- javascript - 将 json 对象转换为表单序列化数据
- php - Laravel 使用关系从 Query 中的 Array 获取单个项目
- powershell - 尝试使用 Powershell 在另一台服务器上远程运行 exe 并失败
- docker - Github Actions Docker 找不到文件
- javascript - reactjs中的img标签未显示在渲染上
- javascript - 节点应用程序不处理发布请求
- java - Java找不到枚举变量
- sql - 不同色谱柱的不同 SCD 类型
- javascript - 如何在 k6 的批处理请求中包含 JSON 查询
- python - 附加到 python 对象列表时出错