我的SQL有問題。我創建了這個查詢:通過查詢從組中獲取百分比
我不知道如何得到一個查詢的結果。我知道要計算百分比,我必須將櫃檯中獲得的價值乘以100,然後除以整個計數的總和。你可以幫我嗎?
非常感謝。
我的SQL有問題。我創建了這個查詢:通過查詢從組中獲取百分比
我不知道如何得到一個查詢的結果。我知道要計算百分比,我必須將櫃檯中獲得的價值乘以100,然後除以整個計數的總和。你可以幫我嗎?
非常感謝。
我認爲最簡單的方法是使用一個變量:
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
在其他的數據庫中,這是簡單,因爲你可以使用窗口功能。
試試這個:
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
編輯我的答案。 –
SELECT Table1.Browser, Table1.Counter, Round((Table1.Counter/(Select sum(Table1.Counter) from Table1))*100,2) & " %" AS Percentage
FROM Table1;
這個查詢在Access完美的作品。它也應該在SQL中。試試看
我會用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
保羅,謝謝你的幫助!我真的需要你的幫助:) 我試圖在phpmyadmin查詢,但列「百分比」每次返回null ..沒有SQL語法錯誤,但列是每次我們可以做什麼? 更新:@總是每次都是空的... –
@AlexObrien您的MySQL版本是什麼? –
我現在嘗試你的代碼,但它有一個語法錯誤... –
@AlexObrien。 。 。這不是很有幫助。你應該指定錯誤是什麼。 –