MySQL处理分组含Null数据及判断群聊是否无有效用户
MySQL群聊用户状态统计及Null值处理方案
表结构与数据
anggota_chat表
| id_anggota_chat | id_user | id_chat |
|---|---|---|
| 123-ffx-334 | x839-def | 1234 |
| dfe-425-xxd | d238-f123 | 1456 |
| 123-fje-ke1 | Null | 1234 |
users表
| id_user | other field.. |
|---|---|
| x839-def | other data |
| d238-f123 | other data |
| df23-kjef | other data |
需求说明
按id_chat分组,列出每个群聊下的所有id_user数据(需处理anggota_chat表中的Null值),同时判断该群聊是否已无有效用户(有效用户指id_user非Null且存在于users表中的记录)。
解决方案
以下SQL语句可实现需求:
SELECT ac.id_chat, -- 将Null值替换为标识文本,拼接所有用户ID GROUP_CONCAT(CASE WHEN ac.id_user IS NULL THEN '无关联用户' ELSE ac.id_user END SEPARATOR ', ') AS all_associated_users, -- 判断群聊是否存在有效用户 CASE WHEN COUNT(u.id_user) = 0 THEN '已无有效用户' ELSE '存在有效用户' END AS chat_user_status FROM anggota_chat ac LEFT JOIN users u ON ac.id_user = u.id_user GROUP BY ac.id_chat;
结果示例
执行上述SQL后,会得到如下输出:
| id_chat | all_associated_users | chat_user_status |
|---|---|---|
| 1234 | x839-def, 无关联用户 | 存在有效用户 |
| 1456 | d238-f123 | 存在有效用户 |
若某群聊的所有id_user均为Null或未在users表中匹配到,chat_user_status会显示为已无有效用户,all_associated_users也会对应展示处理后的Null标识。
内容的提问来源于stack exchange,提问作者Haksatrya Bhaswara
相关产品推荐
相关产品推荐

