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谢谢。。我把另一个答案放在提琴里,以显示它在哪里坏了。