gpt4 book ai didi

Mysql按列分组并最好在另一个列值上获取最大ID

转载 作者:太空宇宙 更新时间:2023-11-03 11:21:47 24 4
gpt4 key购买 nike

我有一个表格,内容是这样的;

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_defaultid 相乘并排序,以便从查询中获取最大 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 |
+----------+---------+

关于Mysql按列分组并最好在另一个列值上获取最大ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59089414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com