mysql - 按总价值和交易总数查找顶级支付类型
问题描述
我有表Payments,其中包含以下数据:
架构(MySQL v5.7)
CREATE TABLE payments (
Transaction_ID INT NOT NULL,
Business_ID INT NOT NULL,
Payment_Amount DECIMAL(25,2),
Payment_Type VARCHAR(6),
PRIMARY KEY (Transaction_ID)
);
CREATE TABLE business_results (
Business_ID INT NOT NULL,
Top_Payment_Type_by_Dollar_Amount VARCHAR(6),
Top_Payment_Type_by_Transactions VARCHAR(6),
PRIMARY KEY (Business_ID)
);
INSERT INTO payments (Transaction_ID, Business_ID, Payment_Amount, Payment_Type)
VALUES (1,2, 3.00, 'CASH'),
(2,1,15.00,'CREDIT'),
(3,4,5.00,'CASH'),
(4,3,31.00,'CASH'),
(5,4,2.00,'CREDIT'),
(6,2,25.00,'CASH'),
(7,2,30.00,'CREDIT'),
(8,3,16.00,'CASH'),
(9,1,7.00,'CREDIT'),
(10,4,4.00,'CREDIT');
查询 #1
select * from payments;
| Transaction_ID | Business_ID | Payment_Amount | Payment_Type |
| -------------- | ----------- | -------------- | ------------ |
| 1 | 2 | 3 | CASH |
| 2 | 1 | 15 | CREDIT |
| 3 | 4 | 5 | CASH |
| 4 | 3 | 31 | CASH |
| 5 | 4 | 2 | CREDIT |
| 6 | 2 | 25 | CASH |
| 7 | 2 | 30 | CREDIT |
| 8 | 3 | 16 | CASH |
| 9 | 1 | 7 | CREDIT |
| 10 | 4 | 4 | CREDIT |
交易类型包括“信用”或“现金”
我正在尝试使用以下结果创建查询:
- 第 1 列:Business_ID
- 第 2 列:按支付类型的总和计算,哪些支付类型的总美元金额最大
- 第 3 列:哪些支付类型的交易次数最多
根据提供的数据,结果应如下:
+-------------+-----------------------------------+----------------------------------+
| Business_ID | Top_Payment_Type_by_Dollar_Amount | Top_Payment_Type_by_Transactions |
+-------------+-----------------------------------+----------------------------------+
| 1 | CREDIT | CREDIT |
| 2 | CREDIT | CASH |
| 3 | CASH | CASH |
| 4 | CREDIT | CREDIT |
+-------------+-----------------------------------+----------------------------------+
我将如何在单个MySQL 查询中执行此操作?
--
解决方案
所以,问题的第一部分可以这样解决......
SELECT x.business_id
, x.payment_type
FROM payments x
JOIN
( SELECT business_id
, MAX(payment_amount) payment_amount
FROM (SELECT * FROM payments) n
GROUP
BY business_id
) y
ON y.business_id = x.business_id
AND y.payment_amount = x.payment_amount
ORDER
BY x.business_id;
...子查询n不是绝对必要的-我可以(并且应该)刚刚使用过FROM payments
,但是这样它为解决问题的下一部分提供了线索,本质上,您只需要将 n 替换为 .. .
SELECT business_id
, payment_type
, SUM(payment_amount) total
FROM payments
GROUP
BY business_id
, payment_type;
...并稍微调整主连接子句
推荐阅读
- wordpress - 如何解决使用 MultiSite Clone Duplicator 创建的 wordpress 多站点中的上传错误?
- android - 如何在jetpack compose中使用BottomBar实现底部表
- go - Redis分布式锁不生效
- java - 拦截器在 Spring Boot GraphQL 中不起作用
- javascript - 如何在 javascript 中知道我的数组的长度
- javascript - Vue 3 获取 scss 变量
- glib - 由于未满足的依赖关系,无法通过 MIPS 安装 rrdtool-1.7.2
- php - ErrorException 未定义变量 $siswa
- android - 指定为非空的参数是房间数据库中的空错误
- javascript - Rollup -c 进程在创建 bundle 后没有关闭