Select 同一行中的不同字符串

Select different strings in the same row

我有一个名为 "character_certifications" 的 table,我需要 select 不同的字符串作为相同结果的计数。 table 看起来像这样:


classId charId 变量

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 请求,但 returns 我 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的总和怎么算?

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

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

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

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

如果您做不到,您将不得不忍受非常昂贵的 table 扫描,使用 SUBSTRING_INDEX(var, '-', -1) 之类的东西来提取组件。这在大 tables 上往往非常慢。

你应该尝试这样的事情:

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

试试看 here.