gpt4 book ai didi

MySQL:使用 IF 条件对重复 ID 进行分组

转载 作者:搜寻专家 更新时间:2023-10-30 22:26:33 25 4
gpt4 key购买 nike

我有一个表 tblRater(包含所有可以对某个主题进行评分的用户),其示例数据如下:

RaterID | Name  |
=================
rater_1 |Katty |
rater_2 |Batty |
rater_3 |Ratty |
rater_4 |Shatty |
rater_5 |Patty |

还有一个表tblAuthorizedRater(里面有分配给哪个rater给哪个topic打分的数据),样本数据如下:

TopicID | RaterID |
===================
topic_1 | rater_1 |
topic_1 | rater_2 |
topic_1 | rater_3 |
topic_2 | rater_2 |
topic_2 | rater_3 |
topic_3 | rater_1 |
topic_3 | rater_2 |
topic_6 | rater_1 |

因此,当我查找允许对 topic_1 进行评分的评分者列表时,我希望得到以下数据:

RaterID | Authorized|
=====================
rater_1 | 1 |
rater_2 | 1 |
rater_3 | 1 |
rater_4 | 0 |
rater_5 | 0 |

上表基本上是来自 tblRater 的所有评分者列表和来自 tblAuthorizedRater 的 topic_1 的授权评分者列表。

我尝试使用左侧的 tblRater 和右侧的 tblAuthorizedRater 以及 if 条件进行左连接。但是,我得到的结果重复了 RaterID,如果我对它进行分组,我不会得到预期的结果。

仅供引用,这是我目前正在尝试的查询:

select
tr.RaterID,
IF(tar.TopicID = 'topic_1', 1, 0) as Authorized
from tblRater as tr
left join tblAuthorizedRater as tar
on tr.RaterID = tar.RaterID;

我也尝试查看子选择、联合,但都没有帮助。

最佳答案

topicID = 'topic_1' 放在 ON 子句中,这样您就可以只从 tblAuthorizedRater 中选择那些行。然后通过测试 NULL 来检查连接是否找到了匹配的行。

SELECT 
tr.RaterID,
tar.topicID IS NOT NULL AS Authorized
FROM tblRater AS tr
LEFT JOIN tblAuthorizedRater AS tar
ON tr.RaterID = tar.RaterID AND tar.TopicID = 'topic_1'

DEMO

关于MySQL:使用 IF 条件对重复 ID 进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50731174/

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