2011-07-19 3 views
0

私は私が行うことができますどのように崩壊データは、私のデータベースで

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

を取得したいデータのリスト

名前値

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 

を持っていますこの?

明らか
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) 
関連する問題