在SQL查询中使用GROUP BY时获取总计百分比

时间:2016-01-22 12:41:16

标签: mysql sql math

我有一个SQL查询,我用它来返回客户在一周中的每一天(去年)记录的培训课程数。

SELECT COUNT(*) total_sessions
     , DAYNAME(log_date) day_name
  FROM programmes_results
 WHERE log_date >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR) 
   AND log_date <= CURDATE() 
   AND client_id = 7171
 GROUP 
    BY day_name
 ORDER 
    BY FIELD(day_name, 'MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY', 'SUNDAY')

我想绘制一张表格,显示这些值占总数的百分比,而不是每天的“计数”。但是,如果没有其他查询(我想避免),我有点不知道如何做到这一点。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

使用派生表

select day_name, total_sessions, total_sessions / sum(total_sessions) * 100 percentage
from (
query from your question goes here
) temp
group by day_name, total_sessions

答案 1 :(得分:0)

  1. 您可以在客户端应用程序中添加每天的培训次数,以获得总计数。这样你绝对不会有第二个查询来获得总数。

  2. 使用查询中的with rollup修饰符获取最后一行返回的总数:

    ...GROUP BY day_name WITH ROLLUP ORDER BY ...

  3. 使用子查询返回每行中的总计数

    SELECT ..., t.total_count ...FROM programmes_results INNER JOIN (SELECT COUNT(*) as total_count FROM programmes_results WHERE <same where criteria>) as t --NO join condition ...

  4. 这将对数据库产生最大的性能影响,但是,它使您能够获得每行的总数。