2013-10-22 65 views
0

有關語句簡短問題「分組依據」:組 - 由不同的結果,包括。在MySQL數

我現在的分貝結構如下:

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 

Bu t「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

首先恕我直言,那是一個糟糕的設計,號碼存儲到字符列。使用整數比字符更快。據說,我假設名稱欄中的所有值都是數字。這裏是一個查詢,以避免多重ABC值

SELECT name, 
     SUM(convert(number, SIGNED INTEGER)) as number, 
     count(*) as Anzahl 
FROM TableName 
GROUP BY name ; 
+0

嗨,謝謝你的回答。我想合併名稱和數字,你的解決方案只合併名稱。數字不起作用。 – kewl

+0

@ user2908141在名稱上學習SQL .. merge(GROUP BY)(因爲您希望具有唯一的「ABC」)SUM基於名稱的所有數字(總和合並所有記錄)。 –

+0

@ user2908141您在哪裏只能看到名稱合併和數字不合並?添加 訂單編號 並按照您在初始問題中解釋的數據查看數據。另外,你在sqlfiddle上的數據稍微不同於你的問題所解釋的數據。例如,sqlfiddle有「橙色 - 測試」,但你的問題沒有提及它。我想我的問題是給你你的期望。您在sqlfiddle上有「測試1」和「測試1測試」,但您的問題最終輸出期望「測試1」的計數爲2。這怎麼可能? – Parag

0

這是我的建議(SQL小提琴鏈接:http://sqlfiddle.com/#!2/c6f83b/5/0

  1. 像@Parag說,我強烈要求你改變表的定義

  2. 那麼SQL很簡單:

    SELECT姓名,編號,COUNT(*)AS anzahl FROM表名 在哪裏號碼不是NULL GROUP BY名稱,號碼

+0

我一直試圖編碼 - 不工作:( –

+0

嗨,結果應該是這樣的:http://sqlfiddle.com/#!2/dcbee/28 - 有沒有任何性能提示/提示? – kewl

+0

爲什麼你從結果中排除「」橙色 - 測試「,」400000「」,僅因爲它「400000」出現在「ABU」,「400000」之下)?性能是一個biggie做字符串比較整數時..顯然你比我更瞭解數據,但這是我對代碼的解釋:http://sqlfiddle.com/#!2/c6f83b/11/0 –