关于mysql中声明“group by”的简短问题:
我当前的数据库结构如下:
CREATE TABLE TableName
(
ID int primary key,
name varchar(255),
number varchar(255)
);
INSERT INTO TableName
(ID, name, number)
VALUES
(1, "Test 1", "100000"),
(2, "Apple", "200000"),
(3, "Test 1 beta", "100000"),
(4, "BLA", "300000"),
(5, "ABU", "400000"),
(6, "CBA", "700000"),
(7, "ABC", "600000"),
(8, "Orange - Test", "400000"),
(9, "ABC", "");
我目前的陈述如下:
SELECT name, number, count(*) as Anzahl
FROM TableName
group by name,number
使用此语句,结果如下:
NAME NUMBER ANZAHL
ABC 1
Test 1 100000 2
Apple 200000 1
BLA 300000 1
ABU 400000 2
ABC 600000 1
CBA 700000 1
但是“ABC”的值不会合并。
结果应该如下:
NAME NUMBER ANZAHL
Test 1 100000 2
Apple 200000 1
BLA 300000 1
ABU 400000 2
ABC 600000 2
CBA 700000 1
任何想法如何运作?
SQLFiddle: http://sqlfiddle.com/#!2/dcbee/1
解决方案必须具有+1 000 000行
等性能答案 0 :(得分:0)
首先,恕我直言,将数字存储到字符列中是一个糟糕的设计。使用整数比字符更快。话虽如此,我假设名称列中的所有值都是数字。这是一个避免多个ABC值的查询
SELECT name,
SUM(convert(number, SIGNED INTEGER)) as number,
count(*) as Anzahl
FROM TableName
GROUP BY name ;
答案 1 :(得分:0)
这就是我的建议(SQL Fiddle Link:http://sqlfiddle.com/#!2/c6f83b/5/0)
就像@Parag说的那样,我强烈建议你改变表格定义
然后SQL很简单:
SELECT name,number,COUNT(*)AS anzahl FROM tablename 数字不是NULL GROUP BY名称,编号