2016-01-22 307 views
0

我有一个SQL查询用于返回客户在一周中的每一天(上一年)记录的培训会话数。在SQL查询中使用GROUP BY时获取总数的百分比

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') 

然后,我想绘制一个表格,显示这些值占总数的百分比,而不是每天的“计数”。然而,如果没有另一个查询(我想避免这种查询),我会有点不知所措。

有什么想法?

+0

如果你喜欢,可以考虑下列行为这个简单的两步过程:1.如果您还没有这样做,提供适当的创建和插入语句(和/或sqlfiddle),这样我们可以更容易地复制问题。 2.如果您尚未这样做,请提供与步骤1中提供的信息相对应的所需结果集。 – Strawberry

回答

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. 内返回总体计数

这对性能影响最大数据库,但是,它使您可以在每行中具有总数。

+0

针对tip RE汇总的Thnaks,在指示我朝着正确的方向时非常有用。 :) –

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