2

我正在寻找一个 mysql 查询来执行此操作:

我有一张桌子:核心

id tag
1  GameAnimal
2  Game
3  AbstractGame
4  AbstractAnimal
5  GameAbstract

现在我想要一个结果来计算像

Game     : 4
Animal   : 2
Abstract : 3

我使用mysql的in函数做了类似的事情,如下所示:

select tag, count(*) as count from core where tag in('Game','Abstract') group by tag

这给了我结果

Game : 1

上面的查询匹配字母然后给出响应,因为 GameAnimal 不等于 Game 它不包含在结果中,这里没有通配符有用。

如果无法进行此类查询,请建议我在单个查询调用中执行此操作的方法。

4

3 回答 3

3

或者,您可以这样做(假设您能够动态构建查询):

select 
  count(if(tag like '%Game%', 1, null)) AS Game_Count, 
  count(if(tag like '%Animal%', 1, null)) AS Animal_Count, 
  count(if(tag like '%Abstract%', 1, null)) AS Abstract_Count 
from 
  core

或者union如果您需要将结果作为列获取,则使用语法(当标签数量很大时这将很有用)

于 2013-08-14T13:00:34.210 回答
0

首先,您需要一个包含所有可能标签的 TAGS 表:

CREATE TABLE tags
    ( `tag` varchar(40))
;

INSERT INTO tags
    ( `tag`)
VALUES
    ('Game'),
    ('Animal'),
    ('Abstract');

然后所有标签都应该用逗号分隔:

id tag
1  Game,Animal
2  Game
3  Abstract,Game
4  Abstract,Animal
5  Game,Abstract

现在这是一个查询:

select tags.tag, count(*) from t 
join tags on FIND_IN_SET(tags.tag,t.tag)>0
group by tags.tag

SQL Fiddle 演示

于 2013-08-14T13:03:21.913 回答
0
SELECT 
(SELECT count(*) from `table` where tag like '%game%') as 'game', 
(SELECT count(*) from `table`  where tag like '%animal%') as 'animal', 
(SELECT count(*) from `table`  where tag like '%abstract%') as 'abstract' 
于 2013-08-14T13:23:53.413 回答