我有一个名为" character_certifications"我需要在同一结果中选择不同的字符串作为计数。该表如下所示:
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,例如:
答案 0 :(得分:0)
如果可以,请调整架构以拆分该复合字符串,或者将两个关键组件分解为派生列,以便快速对它们求和。然后它就像:
一样简单SELECT var, SUM(column_b)
FROM character_certifications
WHERE column_a IN ('EmergentAbility65', 'EmergentAbility70')
GROUP BY column_a
column_a
和column_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。