2017-02-16 66 views
-1

我的SQL有問題。我創建了這個查詢:通過查詢從組中獲取百分比

我不知道如何得到一個查詢的結果。我知道要計算百分比,我必須將櫃檯中獲得的價值乘以100,然後除以整個計數的總和。你可以幫我嗎?

非常感謝。

回答

0

我認爲最簡單的方法是使用一個變量:

SELECT browser, counter, counter/@sum 
FROM (SELECT browser, count(*) as counter, (@sum := @sum + count(*)) 
     FROM analyticsCbVisits v INNER JOIN 
      analyticsCbPlatformsBrowsers pb 
      ON v.idChatBotTrackOperation = pb.idChatBotTrackOperation INNER JOIN 
      analyticsBrowsers b 
      ON pb.browser_id = b.id CROSS JOIN 
      (SELECT @sum := 0) params 
     WHERE b.idChatBotTrackOperation = 33 
     GROUP BY browser 
    ) x 

在其他的數據庫中,這是簡單,因爲你可以使用窗口功能。

+0

我現在嘗試你的代碼,但它有一個語法錯誤... –

+0

@AlexObrien。 。 。這不是很有幫助。你應該指定錯誤是什麼。 –

0

試試這個:

set @csum := 0; 
SELECT browser,counter,CONCAT(FORMAT(IF(total=0,0,(counter*100.0)/total),2),'%') as percentage FROM(
SELECT browser, count(*) as counter,@csum := @csum+count(*) as total 
FROM analyticsCbVisits 
INNER JOIN analyticsCbPlatformsBrowsers ON analyticsCbVisits.idChatBotTrackOperation = analyticsCbPlatformsBrowsers.idChatBotTrackOperation 
INNER JOIN analyticsBrowsers ON analyticsCbPlatformsBrowsers.browser_id = analyticsBrowsers.id 
WHERE analyticsCbVisits.idChatBotTrackOperation = 33 
GROUP BY browser) t 

另一種方式來解決這個問題:

SELECT browser,counter,CONCAT(FORMAT(IF(total=0,0,(counter*100.0)/total),2),'%') as percentage FROM(
    SELECT browser, count(*) as counter,(SELECT count(*) 
    FROM analyticsCbVisits 
    INNER JOIN analyticsCbPlatformsBrowsers ON analyticsCbVisits.idChatBotTrackOperation = analyticsCbPlatformsBrowsers.idChatBotTrackOperation 
    INNER JOIN analyticsBrowsers ON analyticsCbPlatformsBrowsers.browser_id = analyticsBrowsers.id 
    WHERE analyticsCbVisits.idChatBotTrackOperation = 33) as total 
    FROM analyticsCbVisits 
    INNER JOIN analyticsCbPlatformsBrowsers ON analyticsCbVisits.idChatBotTrackOperation = analyticsCbPlatformsBrowsers.idChatBotTrackOperation 
    INNER JOIN analyticsBrowsers ON analyticsCbPlatformsBrowsers.browser_id = analyticsBrowsers.id 
    WHERE analyticsCbVisits.idChatBotTrackOperation = 33 
    GROUP BY browser) t 
+0

編輯我的答案。 –

0
SELECT Table1.Browser, Table1.Counter, Round((Table1.Counter/(Select sum(Table1.Counter) from Table1))*100,2) & " %" AS Percentage 
FROM Table1; 

這個查詢在Access完美的作品。它也應該在SQL中。試試看

0

我會用WITH ROLLUP獲得總計數

| Browser | Counter | 
    --------------------- 
    | Firefox | 2 | 
    | Chrome | 1 | 
    | NULL | 3 | 

和計算應用側的百分數。

但是 - 如果你只是想運行查詢和導出的結果,你可以保存總數到一個會話變量在子查詢中,並在外部使用它選擇:

SELECT browser, counter, 100 * counter/@total as percentage 
FROM (
    SELECT browser, 
     CASE WHEN browser IS NULL 
      THEN @total := COUNT(*) 
      ELSE COUNT(*) 
     END AS counter 
    FROM analyticsCbVisits 
    INNER JOIN analyticsCbPlatformsBrowsers ON analyticsCbVisits.idChatBotTrackOperation = analyticsCbPlatformsBrowsers.idChatBotTrackOperation 
    INNER JOIN analyticsBrowsers ON analyticsCbPlatformsBrowsers.browser_id = analyticsBrowsers.id 
    WHERE analyticsCbVisits.idChatBotTrackOperation = 33 
    GROUP BY browser 
) t 
WHERE browser IS NOT NULL 

這裏是一個簡體演示:http://rextester.com/QAT75385

+0

保羅,謝謝你的幫助!我真的需要你的幫助:) 我試圖在phpmyadmin查詢,但列「百分比」每次返回null ..沒有SQL語法錯誤,但列是每次我們可以做什麼? 更新:@總是每次都是空的... –

+0

@AlexObrien您的MySQL版本是什麼? –