2014-12-08 46 views
1

的部分我有这样的一个表:集团通过使用表达式

  Name    Count 
23feb.01.04.(33.03.03)  1 
23feb.09.(12.04.06)   9 
23feb.02.09.(25.06)   1 
23feb.01.02.04    2 
23feb.01.02     48 
23feb.02.13     4 
23feb.01.04.(33.03.10)  1 
23feb.01.04.(33.03.06)  1 
23feb.02     48 
23feb.02.07     12 
23feb.01.04.(33.03.01)  1 
23feb.02.02     3 
23feb.02.04     11 
23feb      279 
23feb.02.06     3 
23feb.03     83 

有没有办法做一个group by函数来获得总成绩为Name串的更高水平?所以,理想的结果是这样的:

Name      Count 
    23feb      507 

它是如何做到的?

+0

是使用组的SQL'SubString' – 2014-12-08 07:17:22

回答

2

任何(行)的表达,你可以查询也可以是一组由表达式:

SELECT SUBSTR(name, 1, INSTR(name, '.')), COUNT(*) 
FROM  my_table 
GROUP BY SUBSTR(name, 1, INSTR(name, '.')) 
+0

如此接近,击败9秒。 – 2014-12-08 07:17:52

+0

我开始明白它是如何在这里工作的!但是,您的查询仍然不同。哪一个工作,取决于表中的所有值。也就是说,那里所有的价值观都将在该表中。 – tvCa 2014-12-08 14:06:40

1

为了避免Like通配符,你可以通过使用字符串函数使用LEFT

SELECT LEFT(name,5), COUNT(*) 
    FROM  my_table 
    GROUP BY LEFT(name,5) 
+0

就是这样,您可以将列上的某个功能分组,而不是在列上进行分组,就像上面刚刚发生的那样。使用LEFT或SUBSTR就是你选择的。一旦你按它分组,它就成为一个候选者放在SELECT部分​​,就像显示的一样。 – tvCa 2014-12-08 14:04:39