1.银行代缴花费bank_bill
字段名 | 描述 |
serno | 流水号 |
date | 交易日期 |
accno | 账号 |
name | 姓名 |
amount | 金额 |
brno | 缴费网点 |
-
serno
: 一个 BIGINT UNSIGNED 类型的列,作为主键,且不为空。该列是自动增量的,每次插入新行时,都会自动递增生成一个唯一的值。 -
date
: 一个 DATE 类型的列,存储日期信息,不为空。 -
accno
: 一个 VARCHAR(100) 类型的列,用于存储账号信息,不为空。 -
name
: 一个 VARCHAR(50) 类型的列,用于存储姓名信息,不为空。 -
amount
: 一个 DECIMAL(10, 1) 类型的列,用于存储金额信息,不为空。该列的定义表示它可以存储最大 10 位数,其中小数点后有 1 位。 -
brno
: 一个 VARCHAR(150) 类型的列,用于存储分行信息,不为空。
建表如下:
CREATE TABLE `bank_bill` (`serno` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`date` date NOT NULL,`accno` varchar(100) NOT NULL,`name` varchar(50) NOT NULL,`amount` decimal(10,1) NOT NULL,`brno` varchar(150) NOT NULL,PRIMARY KEY (`serno`)
) ENGINE=InnoDB AUTO_INCREMENT=10011 DEFAULT CHARSET=utf8
插入些数据:
INSERT INTO bank_bill (serno, date, accno, name, amount, brno) VALUES
(10001, '2024-05-01', '1234567890', 'zhang', 1000.5, '支行 A'),
(10002, '2024-05-01', '2345678901', 'li', 2000.3, '支行 C'),
(10003, '2024-05-01', '3456789012', 'zhang', 1500.2, '支行 B'),
(10004, '2024-05-01', '4567890123', 'wang', 2500.7, '支行 B'),
(10005, '2024-05-02', '5678901234', 'li', 1800.4, '支行 E'),
(10006, '2024-05-02', '6789012345', 'liu', 2200.9, '支行 B'),
(10007, '2024-05-03', '7890123456', 'luo', 1700.6, '支行 C'),
(10008, '2024-05-03', '8901234567', 'xie', 1900.8, '支行 A'),
(10009, '2024-05-04', '9012345678', 'zhang', 2100.2, '支行 D'),
(10010, '2024-05-04', '0123456789', 'ma', 2400.5, '支行 C');
1、统计表中缴费的总笔数和总金额
select count(serno),sum(amount) from bank_bill;
2、给出一个sql,按网点和日期统计每个网点每天的营业额,并按照营业额进行倒序排序
select brno,date,sum(amount) as money from bank_bill group by brno,date order by money desc;
3.查询每个客户的平均缴费金额:
SELECT name, AVG(amount) AS avg_amount
FROM bank_bill
GROUP BY name;
4.找出最大单笔交易的客户姓名和金额:
SELECT name, amount
FROM bank_bill
WHERE amount = (SELECT MAX(amount) FROM bank_bill);
5.统计每个网点的交易次数和总金额,并按交易次数排序:
SELECT brno, COUNT(*) AS transaction_count, SUM(amount) AS total_amount
FROM bank_bill
GROUP BY brno
ORDER BY transaction_count ASC;
6.列出交易额在平均交易额之上的所有交易记录:
SELECT *
FROM bank_bill
WHERE amount > (SELECT AVG(amount) FROM bank_bill);
7.按月份统计交易总额和总笔数:
SELECT YEAR(date) AS year, MONTH(date) AS month, SUM(amount) AS total_amount, COUNT(*) AS total_transactions
FROM bank_bill
GROUP BY YEAR(date), MONTH(date);