子查询双穿+聚合函数

subquery double where + aggreate functions

我有 table 行

CREATE TABLE `TEST_TRANSACTIONS`.`Users` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `balance` INT NOT NULL,
  `payed` INT NOT NULL,
  `isSimpleUser` INT NOT NULL,
  `approvedAdminId` VARCHAR(45) DEFAULT NULL,
  PRIMARY KEY (`id`));


INSERT INTO `TEST_TRANSACTIONS`.`Users` (`id`, `balance`, `payed`, `isSimpleUser`) VALUES ('1', '1', '2', '0');
INSERT INTO `TEST_TRANSACTIONS`.`Users` (`id`, `balance`, `payed`, `isSimpleUser`) VALUES ('2', '2', '4', '0');
INSERT INTO `TEST_TRANSACTIONS`.`Users` (`id`, `balance`, `payed`, `isSimpleUser`, `approvedAdminId`) VALUES ('3', '10', '20', '1', '53ed3434asd');
INSERT INTO `TEST_TRANSACTIONS`.`Users` (`id`, `balance`, `payed`, `isSimpleUser`, `approvedAdminId`) VALUES ('4', '25', '35', '1', '35sdd2342ss');
INSERT INTO `TEST_TRANSACTIONS`.`Users` (`id`, `balance`, `payed`, `isSimpleUser`) VALUES ('5', '4444', '5555', '1');

我想为具有 approvedAdminId (isSimpleUser = 1 AND approvedAdminId is not NULL) 的简单用户和非简单用户 (isSimpleUser = 0)

计算余额和付款金额

预期结果

sumBalancePremiumUsers sumPayedPremiumUsers sumBalanceSimpleApprovedUsers sumPayedSimpleApprovedUsers

3                      6                    35                            55
SELECT
  SUM(IF(isSimpleUser = 0, balance, 0)) AS sumBalancePremiumUsers,
  SUM(IF(isSimpleUser = 0, payed, 0)) AS sumPayedPremiumUsers,
  SUM(IF(isSimpleUser AND approvedAdminId IS NOT NULL, balance, 0)) AS sumBalanceSimpleApprovedUsers,
  SUM(IF(isSimpleUser AND approvedAdminId IS NOT NULL, payed, 0)) AS sumPayedSimpleApprovedUsers
FROM Users

输出:

+------------------------+----------------------+-------------------------------+-----------------------------+
| sumBalancePremiumUsers | sumPayedPremiumUsers | sumBalanceSimpleApprovedUsers | sumPayedSimpleApprovedUsers |
+------------------------+----------------------+-------------------------------+-----------------------------+
|                      3 |                    6 |                            35 |                          55 |
+------------------------+----------------------+-------------------------------+-----------------------------+

您只需要根据您的条件用 case when then 子句对这些求和

SELECT
  SUM(CASE WHEN isSimpleUser = 0 then balance else 0 end) AS sumBalancePremiumUsers,
  SUM(CASE WHEN isSimpleUser = 0 then payed else 0 end) AS sumPayedPremiumUsers,
  SUM(CASE WHEN isSimpleUser =1 AND approvedAdminId IS NOT NULL then balance else 0 end ) AS sumBalanceSimpleApprovedUsers,
  SUM(CASE WHEN isSimpleUser=1 AND approvedAdminId IS NOT NULL then  payed else  0 end) AS sumPayedSimpleApprovedUsers
FROM Users

看看这个 - <>db-fiddle