gpt4 book ai didi

MySQL如何从多行中分组并选择某些状态?

转载 作者:行者123 更新时间:2023-11-29 12:34:53 24 4
gpt4 key购买 nike

信用卡公司向每个消费者发行多张信用卡。

CREATE TABLE card (
cardnumber int PRIMARY KEY,
customer int,
balance decimal(9,2),
status varchar(10)
);

INSERT INTO card VALUES ('100', '1', 100.00, 'active');
INSERT INTO card VALUES ('101', '1', 100.00, 'expired');
INSERT INTO card VALUES ('102', '2', 100.00, 'limited');
INSERT INTO card VALUES ('103', '2', 100.00, 'locked');
INSERT INTO card VALUES ('104', '3', 100.00, 'lost');
INSERT INTO card VALUES ('105', '3', 100.00, 'closed');

需要一份报告,其中包含每个持卡人的一行、所有卡的总余额以及按以下顺序排列的限制最少的状态:1. 有效、2. 过期、3. 受限、4. 锁定、5. 丢失, 6. 关闭。

持卡人 #1 有一张卡处于“有效”状态,还有一张卡处于“过期”状态,报告应显示“有效”。
持卡人 #2 有一张卡处于“受限”状态,并且有一张卡处于“锁定”状态,报告应显示“受限”。
持卡人 #3 有一张卡处于“丢失”状态,还有一张卡处于“已关闭”状态,报告应显示“丢失”。

看来拥有另一个状态表会很有帮助

create table status (
status varchar(15) primary key,
restriction int
);

insert into status values ('active', 1);
insert into status values ('expired', 2);
insert into status values ('limited', 3);
insert into status values ('locked', 4);
insert into status values ('lost', 5);
insert into status values ('closed', 6);

查询如何只显示持卡人卡的限制最少的状态?

select c.customer, sum(c.balance), 'status?'
from card c
join status s on s.status=c.status?
group by c.customer

http://sqlfiddle.com/#!2/8d680/2

PS 表#1“卡”无法更改。

最佳答案

创建一个包含每个客户的最低限制的派生表,然后将最低限制连接到状态表。

select t1.*, s.status from (
select c.customer, sum(c.balance), min(restriction) min_restriction
from card c
join status s on s.status=c.status
group by c.customer
) t1 join status s on t1.min_restriction = s.restriction

http://sqlfiddle.com/#!2/8d680/3

关于MySQL如何从多行中分组并选择某些状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26942454/

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