0

关于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 行之类的内容有效

4

2 回答 2

0

这就是我的建议(SQL Fiddle 链接:http ://sqlfiddle.com/#!2/c6f83b/5/0 )

  1. 就像@Parag 所说,我强烈建议您更改表定义

  2. 然后SQL很简单:

    SELECT name, number, COUNT(*) AS anzahl FROM tablename WHERE number IS NOT NULL GROUP BY name, number

于 2013-10-22T18:25:16.560 回答
0

首先恕我直言,将数字存储到字符列中是一个糟糕的设计。使用整数比字符更快。话虽如此,我假设名称列中的所有值都是数字。这是一个避免多个 ABC 值的查询

SELECT name, 
       SUM(convert(number, SIGNED INTEGER)) as number, 
       count(*) as Anzahl 
FROM TableName 
GROUP BY name ;
于 2013-10-22T17:42:01.840 回答