gpt4 book ai didi

php - Mysql条件MAX或MIN依赖于另一个列值

转载 作者:行者123 更新时间:2023-11-29 08:04:00 24 4
gpt4 key购买 nike

我想运行一个 MYSQL 查询,以获取一列的 MAX 或同一列的 MIN,条件是另一列的值。例如,假设我的表是:

ID、性别、分数

性别可以是“男孩”或“女孩”,我希望查询女孩的合计最高分数和男孩的最低分数

我不想运行复杂的 JOINS 或多个查询“where ID in...”,因为这已经只是更复杂的 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

这将计算女孩的最高分数和男孩的最低分数之和

最佳答案

假设用于驱动条件的列是二进制的,您可以通过将 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

关于php - Mysql条件MAX或MIN依赖于另一个列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23097975/

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