作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
信用卡公司向每个消费者发行多张信用卡。
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
关于MySQL如何从多行中分组并选择某些状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26942454/
我是一名优秀的程序员,十分优秀!