2015-12-01 79 views
2

我的表是這樣的:MySQL查詢爆炸,數

product_id  model  date     computers 
---------------------------------------------------------------- 
12204   Asus   'random_date'   :::aass:::ddff:::ddfd:::dfwr::: 
12205   Acer   'random_date'   :::ersz:::dfwqq:::bbs::: 
12205   Acer   'random_date'   :::ettww:::iwoeur:::iwerq::: 

正如你看到的,PRODUCT_ID,模式可以複製。計算機字段包含當前行中的計算機數量。分隔符是:::。在我將它們分組後(GROUP BY product_id)第一個產品(12204)中有3個計算機,其他產品(12205)中有6個計算機。所以查詢結果必須是這樣的:

GROUP(product_id)  model  count 
----------------------------------------- 
12204     Asus  4 
12205     Acer  6 

是否有可能使用單個查詢嗎?或者我必須在後端代碼(在我的情況下python)呢?

(我不能修改表,我正在別人的先存表)

編輯:更新的樣本數據格式

+0

這樣的數據不要存放(separed值一列)!這隻會導致你很多麻煩。一個值/行是SQL方式! – jarlh

+0

正如Jarlh上面所說的那樣!但是,如果你不能改變這一點,他們總是用3 :::分隔。 – Matt

+0

這不是我的桌子。我無權修改。此外還有大量數據已經存在。 – Gereltod

回答

2

使用的SUMROUNDLENGTH的組合,REPLACE & COUNT爲計數字段,然後組由PRODUCT_ID和型號。

SELECT product_id, model, 
SUM(ROUND ((LENGTH(computers) - LENGTH(REPLACE(computers, ":::", "")))/LENGTH(":::"))) - count(product_id) AS count 
FROM yourtable 
GROUP BY product_id, model 

輸出

product_id model count 
12204  Asus 4 
12205  Acer 6 

SQL小提琴:http://sqlfiddle.com/#!9/ad183/2/0

+0

謝謝先生!正如我想要的一樣工作 – Gereltod

+0

如果您的數據是這樣的 - 上一個代碼將無法正常工作 - aaa ::: a ::: dfsdfwerr ::: dsfsdfsd ::: werwe2334 ::: 324a或只是一個單一的值,如'asdf '..我建議你按照@Tim Biegeleisen所做的一些修正。所以我發佈了一個更新後的查詢作爲下面的答案 – Snm

1

嘗試以下查詢:

SELECT product_id, model, 
    SUM(1 + ((LENGTH(computers) - LENGTH(REPLACE(computers, ':::', '')))/3)) AS count 
FROM products 
GROUP BY product_id, model 

點擊下面的鏈接,運行演示:

SQLFiddle

+0

計數結果中有浮點數。我不明白你爲什麼除以3.在計算機領域每臺計算機上都沒有固定的字符數。 – Gereltod

+0

我認爲你錯過了這一點。取字符串'ersz ::: dfwqq'。如果替換版本(刪除':::')的長度比原來的長度更長,那麼你可以計算1(加1)。這有意義嗎? –

+0

我明白了。仍然有浮動數字。 – Gereltod

1
SELECT product_id, model, 
    CAST(SUM(1 + ((LENGTH(TRIM(BOTH ":::" FROM computers)) - LENGTH(REPLACE(TRIM(BOTH ":::" FROM computers), ":::", "")))/3)) AS UNSIGNED) AS cnt 
FROM products 
GROUP BY product_id, model 

SQLFIDDLE

+0

你的兩個代碼工作。我剛剛測試了你對回覆帖子的評論。我沒有數據wihout :::外面。所有數據包裹在:::之間。 Upvoted您的帖子,以幫助需要不同方法的人。 – Gereltod