我的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。 。 。这不是很有帮助。你应该指定错误是什么。 –