表:消息
id is_main message status
-------------------------------
1 0 testt 1
2 5 testt2 1
3 4 testt3 1
4 5 testt4 1
5 0 testt5 1
6 5 testt6 1
7 4 testt7 1
8 5 testt8 1
9 0 testt9 1
我想按is_main进行分组,但is_main = 0
除外我想要的结果
id is_main message status
-------------------------------
1 0 testt 1
2 5 testt2 1
3 4 testt3 1
3 0 testt5 1
4 0 testt9 1
答案 0 :(得分:1)
您可以使用CASE WHEN ... THEN
有条件地分组。首先按is_main
列进行分组,然后必须为不等于0的记录添加特殊随机值列,以便将它们排除在分组之外。
SELECT *, rand() as rand
FROM messages
GROUP BY is_main, CASE WHEN is_main = 0 THEN rand END;
结果:
+----+---------+---------+--------+---------------------+
| id | is_main | message | status | rand |
+----+---------+---------+--------+---------------------+
| 1 | 0 | testt | 1 | 0.3822869391946932 |
| 9 | 0 | testt9 | 1 | 0.30222991509570735 |
| 5 | 0 | testt5 | 1 | 0.45369350393646724 |
| 3 | 4 | testt3 | 1 | 0.6502720663792193 |
| 2 | 5 | testt2 | 1 | 0.9594265706459307 |
+----+---------+---------+--------+---------------------+
当然,列rand
只是帮助,解决您的问题,它只在组中使用。