Mysql 条件 MAX 或 MIN 依赖于另一列值
Posted
技术标签:
【中文标题】Mysql 条件 MAX 或 MIN 依赖于另一列值【英文标题】:Mysql conditional MAX or MIN dependent on another column value 【发布时间】:2014-04-16 02:32:48 【问题描述】:我想运行一个 mysql 查询,获取一列的 MAX 或同一列的 MIN,条件是 ANOTHER 列的值。例如,假设我的表是:
ID、性别、分数
性别可以是“男孩”或“女孩”,我希望查询女孩的综合 MAX 分数和男孩的 MIN 分数
我不想运行复杂的 JOINS 或多个查询“其中 ID 在....”,因为这已经只是更复杂的 JOIN 查询的一部分,我试图避免性能问题。
我尝试了以下方法:
SELECT ... list of columns ...
DB_User_ID ,
DB_Gender ,
IF(DB_Gender ='girl', MAX(DB_Score), 0) AS Max_Girls_Score,
IF(DB_Gender ='boy', MIN(DB_Score), 0) AS Min_Boys_Score,
FROM DB
JOIN .... and continue of query ....
GROUP BY DB_User_ID
上述查询将无法正常工作,因为如果 DB_Gender = 'girl' 显然 Min_Boys_Score 将归零,反之亦然。问题是 - 围绕这个查询是否有任何合乎逻辑的工作,只为女孩运行 MAX 条件,只为男孩运行 MIN 条件?
从逻辑上讲,我想要实现的(见下文)是:
SELECT .....
IF(DB_Gender ='girl', MAX(DB_Score) AS Max_Girls_Score, MIN(DB_Score) AS Min_Boys_Score)
但这不是合法的 MYSQL 查询
************ 我设法解决了这个问题,这是一个简单的解决方案:************
选择将有条件 if:
SELECT column list
IF(DB_Gender ='girl', MAX(DB_Score), MIN(DB_Score)) AS Min_Max_Scores
......
然后添加另一个 GROUP BY 条件字段:
GROUP BY DB_User_ID, DB_Gender
结果是所有行,按性别分组,而 Min_MAx_Scores 将取决于性别的 MAX 或 MIN
***** 我想出的另一个解决方案************
SELECT ......
SUM(IF(DB_Gender ='girl',MAX(DB_Score),0) AS Max_Girls_Score,
SUM(IF(DB_Gender = 'boy',MIN(DB_Score),0) AS Min_Boys_Score
这将总结女孩的最高分数和男孩的最低分数
【问题讨论】:
【参考方案1】:假设您用来驱动条件的列是二进制的,您可以通过将 IF 组合在一起来解决这个问题,如下所示:
SELECT ... list of columns ...
DB_User_ID ,
DB_Gender ,
IF(DB_Gender ='girl', MAX(DB_Score), MIN(DB_Score) AS Score,
FROM DB
JOIN .... and continue of query ....
GROUP BY DB_User_ID
【讨论】:
感谢您的及时回复。是否可以这样做 - IF(DB_Gender ='girl', MAX(DB_Score) AS Max_Score, MIN(DB_Score) AS Min_Score) ?我现在正在尝试这个 所以....您的回答很好,感谢@nickhamlin 的及时回复-但是-我希望将最高分数和最低分数分开,因为这些分数将用于女孩和男孩.这不是合法的 MYSQL 查询:IF(DB_Gender ='girl', MAX(DB_Score) AS Max_Girls_Score, MIN(DB_Score) AS Min_Boys_Score) 但这就是我想要实现的目标。【参考方案2】:如果你只想要这些属性,你可以试试:
选择 MAX(if(DB_Gender='girl', DB_Score, 0)) AS MaxGirlScore, MIN(if(DB_Gender='boy', DB_Score, 10000000)) 作为 MinBoyScore 来自数据库
注意事项: 如果您试图获得每个女孩/男孩的最大值/最小值,并且每个用户有多个分数,那么这并不是您想要的。请注意,上述内容不适用任何分组语义。
【讨论】:
以上是关于Mysql 条件 MAX 或 MIN 依赖于另一列值的主要内容,如果未能解决你的问题,请参考以下文章
如何使一个材料表列的编辑模式字段类型依赖于另一列的值,而不影响其他行?