2014-12-08 49 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