2011-07-19 96 views
0

在我的數據庫中,我有數據列表崩潰數據

名稱值

a/b/c  1 
a/b/c/d 1 
a/b/c/d/e 1 
b/b/c  1 
b/b/c/d 2 
c/c/d  3 
c/c/d/e 4 
d/d  5 

如果我設置最長3我想

a/b/c 3 
b/b/c 3 
c/c/d 7 
d/d 5 

我該怎麼辦這個?

CREATE TABLE dataTable (
ID       BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
Name      VARCHAR(255), 
Value      INT 
) ENGINE=InnoDB; 


INSERT INTO dataTable (Name, Value) VALUES ("a/b/c", 1), ("a/b/c/d", 1), ("a/b/c/d/e", 1), ("b/b/c", 1), ("b/b/c/d", 1), ("c/c/d", 1), ("c/c/d/e", 1), ("d/d", 1); 

回答

2
SELECT LEFT(Name, 5) AS Name, SUM(Value) as TotalValue 
    FROM dataTable 
    GROUP BY LEFT(Name, 5) 

很顯然,我硬編碼在我的例子中,5,但你可以做這樣一個變量(2 * MAXLEN-1)。

+0

謝謝!我怎麼能夠制定這個,雖然真的指定了一些段而不是處理長度,有時候在'/' – user391986

+2

@user之間有多個變量 - 這是你真正應該在你的數據中解決的問題。你會想出一些聰明和效率低下的解決方法來處理類似這樣的數據結構。 – JNK

1
select name, 
sum(value) as cnt 
from 
dataTable 
group by substring_index(name,'/',3)