In my database I have a list of data
Name Value
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
if I set max length 3 I want to get
a/b/c 3
b/b/c 3
c/c/d 7
d/d 5
How can I do this?
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);
SELECT LEFT(Name, 5) AS Name, SUM(Value) as TotalValue
FROM dataTable
GROUP BY LEFT(Name, 5)
Obviously, I hard-coded the 5 in my example, but you could do a variable like (2*MaxLen-1).
select name,
sum(value) as cnt
from
dataTable
group by substring_index(name,'/',3)
精彩评论