MySql-仅按特定值的列进行分组(无并集)

MySql-仅按特定值的列进行分组(无并集),mysql,Mysql,鉴于以下数据 column a | column b | column c ________ ________ _______ A | apple | 1 P | pear | 3 O | orange | 4 A | apple | 1 P | peach | 2 P | pear | 3 P | peach | 1

鉴于以下数据

column a | column b | column c
________   ________   _______
   A     | apple    |   1
   P     | pear     |   3
   O     | orange   |   4
   A     | apple    |   1
   P     | peach    |   2
   P     | pear     |   3
   P     | peach    |   1
   A     | apple    |   4
我想选择苹果公司唯一的组(和总和)。其余的列不会被分组,因此以下是输出:

column a | column b | column c
________   ________   _______
   A     | apple    |   6
   P     | pear     |   3
   O     | orange   |   4
   P     | peach    |   2
   P     | pear     |   3
   P     | peach    |   1

如果不使用联合体,是否可以执行上述操作?

如果不使用联合体,是否可以执行上述操作

SELECT tbl.id,tbl.a,tbl.b,tbl.c FROM (
SELECT id,a,
    CASE WHEN b='apple' THEN @ap:= (@ap+c) ELSE c END as c,
    CASE WHEN b = (SELECT b FROM fruit WHERE id > frA.id AND b='apple' LIMIT 1) THEN b ELSE CONCAT(' ',b) END as b
    FROM fruit AS frA, (SELECT @ap:=0 ) AS apc
    ) as tbl
WHERE tbl.b REGEXP '^[ ].*$'

现场演示:

不使用工会

SELECT tbl.id,tbl.a,tbl.b,tbl.c FROM (
SELECT id,a,
    CASE WHEN b='apple' THEN @ap:= (@ap+c) ELSE c END as c,
    CASE WHEN b = (SELECT b FROM fruit WHERE id > frA.id AND b='apple' LIMIT 1) THEN b ELSE CONCAT(' ',b) END as b
    FROM fruit AS frA, (SELECT @ap:=0 ) AS apc
    ) as tbl
WHERE tbl.b REGEXP '^[ ].*$'

现场演示:

您是否有任何值为
a的列,其中b列不等于apple?@PaulKaram否,事实上,如果该列不适用于apple分组记录,则在必要时可以简单地将其标记为“n/a”。您是否有任何值为
a的列,其中b列不等于apple?@PaulKaram否,事实上,如果该列不适用于苹果分组记录,则在必要时可以简单地将其标记为“n/a”。