在同一行中选择不同的字符串

时间:2016-04-08 08:03:58

标签: mysql sql

我有一个名为" character_certifications"我需要在同一结果中选择不同的字符串作为计数。该表如下所示:

classId charId var

0       268482320       EmergentAbility65-1
0       268482320       EmergentAbility65-2
0       268482320       EmergentAbility65-3

0       268482320       EmergentAbility70-1
0       268482320       EmergentAbility70-2
0       268482320       EmergentAbility70-3

0       268482320       ClassAbility75-1
0       268482320       ClassAbility75-2
0       268482320       ClassAbility75-3

0       268482320       ClassAbility80-1
0       268482320       ClassAbility80-2
0       268482320       ClassAbility80-3

我需要这样的输出:

for emergentAbilities 65 and 70 = result count 6

我试过这个SQL请求,但它返回1:

SELECT COUNT(distinct var) AS COUNT 
from character_certifications 
where classId=0 AND charId=268482320 AND var"EmergentAbility65-1"

我也试过这个,它让我回复了12:

SELECT COUNT(distinct var) AS COUNT 
from character_certifications 
where classId=0 AND charId=268482320

如何做所有紧急能力65和70的总和?

在某些情况下,角色没有"所有"他们可以拥有紧急能力65和70,例如:

2 个答案:

答案 0 :(得分:0)

如果可以,请调整架构以拆分该复合字符串,或者将两个关键组件分解为派生列,以便快速对它们求和。然后它就像:

一样简单
SELECT var, SUM(column_b)
  FROM character_certifications
  WHERE column_a IN ('EmergentAbility65', 'EmergentAbility70')
  GROUP BY column_a

column_acolumn_b代表var的两个组成部分。如果这些列被编入索引,则此查询运行得非常快。

如果你不能这样做,你将不得不使用诸如SUBSTRING_INDEX(var, '-', -1)之类的东西来提取非常昂贵的表扫描来提取组件。这对大型桌子来说往往非常慢。

答案 1 :(得分:0)

你应该尝试这样的事情:

SELECT COUNT(distinct var) AS COUNT 
from character_certifications 
where classId=0 AND charId=268482320 
AND (var LIKE "EmergentAbility65%" OR var LIKE "EmergentAbility70%")

试试here