MySQL中指定的分组依据

MySQL中指定的分组依据,mysql,group-by,Mysql,Group By,我有一张桌子,看起来像: id b_id picture ---+------+---------------------- 1 | 1 | head.jpg 2 | 1 | willson.jpg 3 | 1 | babolat.jpg 4 | 2 | head.jpg 5 | 2 | prince.jpg 6 | 3 | yonex.jpg 7 | 4 | fila.jpg

我有一张桌子,看起来像:

id   b_id   picture
---+------+----------------------
1  |   1  |     head.jpg
2  |   1  |     willson.jpg
3  |   1  |     babolat.jpg
4  |   2  |     head.jpg
5  |   2  |     prince.jpg
6  |   3  |     yonex.jpg
7  |   4  |     fila.jpg
8  |   2  |     brooks.jpg
9  |   0  |     sergio_tacchini.jpg
10 |   0  |     nike.jpg
11 |   0  |     lacoste.jpg
12 |   0  |     dunlop.jpg
现在,我想通过b_id对组进行分组,但前提是b_id不是0

输出必须如下所示:

id   b_id    picture
---+------+------------------------
1  | 1    |   head.jpg
4  | 2    |   head.jpg
6  | 3    |   yonex.jpg
7  | 4    |   fila.jpg
9  | 0    |   sergio_tacchini.jpg
10 | 0    |   nike.jpg
11 | 0    |   lacoste.jpg
12 | 0    |   dunlop.jpg
试试这个

查询

 (SELECT MIN(id) AS 'id',b_id,picture
 FROM table_name WHERE b_id >0
 GROUP BY b_id)
 UNION ALL 
 (SELECT id,b_id,picture
 FROM table_name WHERE b_id=0);

子查询根据
b\u ID
获取最小的
ID
。为了获得其他列(在本例中,只有一列),子查询的结果随后被连接到表本身,前提是它匹配
b_id
id
的最小值

SELECT  a.ID, a.b_id, a.picture
FROM    tableName a
        INNER JOIN
        (
            SELECT  b_id, MIN(a.id) min_id
            FROM    tableName
            GROUP   BY b_id
        ) b ON a.b_id = b.b_id
                AND a.ID = b.min_id

结合Ullas和John Woo的:

   SELECT a.id, 
          a.b_id, 
          a.picture
     FROM table_name a
LEFT JOIN (
       SELECT b_id, MIN(id) min_id
         FROM table_name
        WHERE b_id > 0
     GROUP BY b_id
          ) b 
       ON a.b_id = b.b_id
      AND a.id = b.min_id
    WHERE a.b_id = 0
       OR b.b_id IS NOT NULL

输出应该是什么?编辑应该是这样的:`id b_id picture 1 1 head.jpg 4 2 head.jpg 6 3 yonex.jpg 7 4 fila.jpg 9 0 sergio_tacchini.jpg 10 0 nike.jpg 11 0 lacoste.jpg 12 0 dunlop.jpg`谢谢你的回答,但这对我不起作用。使用此sql,我将对所有行进行分组,但我只需要对b_id不为零(0)的行进行分组。这是不正确的,图片不能保证与id匹配。请将小提琴中第4行的id更改为13,然后查看。@Arth:先生,请检查小提琴。按OP要求获得输出。@Ullas检查我的最后一条评论。。我只是这样运行它,但它不起作用。@Arth图片就是一个例子。我测试了sql,它对我有效。@Alek_86谢谢。。我把另一个答案放在提琴里,以显示它在哪里坏了。