微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关键查询mysql中的条件分组

如何解决关键查询mysql中的条件分组

我的架构看起来像,

CREATE TABLE `test` (
  `Id` int(11) NOT NULL,`CategoryName` varchar(45) DEFAULT NULL,`type` varchar(40) DEFAULT NULL,`value` decimal(15,4) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;


INSERT INTO `test`
(`Id`,`CategoryName`,`type`,`value`)
VALUES
(1,'Allowance','ADDITION',4000),(1,'Salary',1500),'Telephone',200),'Other',500),'Fine','DEDUCTION','Other Deduction','Salary Deduction',100),(2,300),1300)
;

要求显示汇总的某些类别,而其他类别则按原样显示在这种情况下,工资和津贴将显示在各自的列中,而任何其他加法类型将被汇总。同样适用于扣除类型。

select Id,MAX(CASE
        WHEN CategoryName = 'Salary' THEN pi.value
        ELSE 0
    END) AS 'Salary',MAX(CASE
        WHEN CategoryName = 'Allowance' THEN pi.value
        ELSE 0
    END) AS 'Allowance',MAX(CASE when pi.type = 'ADDITION' THEN
    CASE
        WHEN CategoryName not in ('Salary','Allowance') THEN pi.value -- sum(pi.value)
        ELSE 0
        END
    END) AS 'Other Allowances',MAX(case WHEN CategoryName = 'Fine' THEN pi.value -- sum(pi.value)
        ELSE 0            
    END) AS 'Fine',MAX(CASE when pi.type = 'DEDUCTION' THEN
    CASE
        WHEN CategoryName not in ( 'Fine') THEN pi.value -- sum(pi.value)
        ELSE 0
        END
    END) AS 'Other Deductions' 
     from  test pi group by Id;

现在,当我输入 sum(pi.value) 时,我收到错误 错误代码:1111。组函数的使用无效。如果没有 sum 函数,max 仅返回最大值并忽略其余部分,如 Telephone 加法,这是预期的。

Id  Salary      Allowance   Other Allowances    Fine     Other Deductions
1   1500.0000   4000.0000    500.0000          500.0000    500.0000
2   300.0000    0.0000       1300.0000          0.0000      *null*

因此,id 1 的 Other Allowance 列应显示 700,即 500(其他)+ 200(电话)

在这种情况下,在使用数据透视查询获取总和的正确方法是什么?

dbfiddle

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。