计算行中的结果并非全部匹配

时间:2016-06-11 14:45:08

标签: mysql

我正在尝试在结果VG1的“更多”列中进行最后一次匹配。

在这种情况下,我的查询正在计算列中的所有结果,但我需要在更改之前进行计数。如果它的VG1,VG1,VG2,VG1我需要结果2,而不是3(全部)。

查询:

SELECT home, count(*) as count 
from results 
where more='VG2' and home='pero' 
group by home 
order by count(more) desc

MYSQL schema:

CREATE TABLE results
    (`datum` longtext, `home` longtext, `away` longtext, `more` longtext)
;

INSERT INTO results VALUES     ('14.05.2016 ', 'pero', 'miha', 'VG1');
INSERT INTO results VALUES     ('11.04.2016 ', 'pero', 'milan', 'VG1');
INSERT INTO results VALUES     ('10.03.2016 ', 'pero', 'semenka', 'VG2');
INSERT INTO results VALUES     ('24.02.2016 ', 'pero', 'torta', 'VG1');
INSERT INTO results VALUES     ('14.01.2016 ', 'pero', 'miha3', 'VG2');
INSERT INTO results VALUES     ('10.01.2016 ', 'pero', 'simens', 'VG2');

1 个答案:

答案 0 :(得分:1)

您可以使用变量:

select   home, more, count(*) as count 
from     (select   *,
                   @set := if(@home <> home, '', @set),
                   @home := home,
                   not find_in_set(more, @set) as is_first,
                   @set := if (@more <> '' and @more <> more, 
                               concat(@set, @more, ','), 
                               @set),
                   @more := more
          from     results,
                   (select @set:='', @prev:='', @home='') init
          order by home, datum desc) base
where is_first
group by home, more 
order by count(*) desc

输出:

| home | more | count |
|------|------|-------|
| pero |  VG1 |     2 |
| pero |  VG2 |     1 |

请参阅fiddle

内部查询中的is_first列指示记录是否属于每more个第一批home个值。这是外部查询中的一个条件,因此count函数返回所需的结果。

如果您只需要某个homemore值的结果,那么只需将其添加到外部查询的where子句中。