分组 - 具有明显的结果,包括计数

时间:2013-10-22 17:31:13

标签: mysql count group-by distinct

关于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行

等性能

2 个答案:

答案 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

  1. 就像@Parag说的那样,我强烈建议你改变表格定义

  2. 然后SQL很简单:

    SELECT name,number,COUNT(*)AS anzahl   FROM tablename 数字不是NULL GROUP BY名称,编号

相关问题