gpt4 book ai didi

java - MySQL:单列 SUM(IF(cond,a,b)) 与多列 Sum()

转载 作者:行者123 更新时间:2023-11-29 14:29:12 26 4
gpt4 key购买 nike

有一个遗留的 LAMP 应用程序,我正在将其转换为 JVM。

所讨论的问题需要一个包含@250K 记录的评分表。目前,“scoreType”列表示为tinyint,其中1 = 目标,2 = 协助1,3 = 协助2。

对于得分领先者,要获取每个球员的进球/助攻1/助攻2总计,查询片段如下所示:

SUM(IF(scoreType=1,1,0)) AS goals, SUM(IF(scoreType=2,1,IF(scoreType=3,1,0))) AS assists

很公平,可以完成这项工作,但我想知道,就查询上下文将需要 SUM、COUNT 等操作的一般模式设计而言,是否最好突破有限的限制将诸如目标/助攻1/助攻2、获胜/失败/平局等选择集放入单独的列中,而不是使用tinyint 方法?

在单独的列中,查询将变为:

SUM(goal) AS goal, SUM(assist1) AS assist1, SUM(assist2) AS assist2

这是性能上的胜利(不需要 if(cond,a,b) 匹配),但代价是存储空间略有增加(3 列与 1 列)。

在应用程序层,一个潜在的重大胜利是从 ORM 不支持的 SUM(if()) 转向 column.Sum();否则,我需要使用全在一列方法中保留非静态类型的字符串 SQL 查询

想法?您将如何解决、保持原样或将数据库和应用程序代码迁移到 3 列方法?

感谢反馈!

最佳答案

SELECT scoreType, COUNT(scoreType)
FROM ...
GROUP BY scoreType

不是吗?

<小时/>

为了诚实地比较替代方案,请使用更详细的内容;

SELECT COUNT(CASE WHEN scoreType = 1 THEN id ELSE NULL END) AS goals,
...

关于java - MySQL:单列 SUM(IF(cond,a,b)) 与多列 Sum(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10333032/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com