2017-02-16 70 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版本是什么? –