Mysql按月份分组的计数总和

Mysql按月份分组的计数总和,mysql,Mysql,手头有个棘手的问题。 我如何计算此服务提供的用户总数 SELECT MONTH(VisitTime) AS mon, COUNT( distinct IP) AS usersbymonth FROM stats WHERE YEAR( VisitTime) = YEAR( current_date ) GROUP BY mon 棘手的是,汇总和计数(不同的IP)提供更低的信息。 计数(全年不同)。这是因为mon的GROUP允许相同的IP在多个月内存在 现在,结果显示基本正确。M

手头有个棘手的问题。 我如何计算此服务提供的用户总数

SELECT 
MONTH(VisitTime) AS mon, 
COUNT( distinct IP) AS usersbymonth
FROM stats 
WHERE 
YEAR( VisitTime) = YEAR(  current_date  )  
GROUP BY mon

棘手的是,汇总和计数(不同的IP)提供更低的信息。 计数(全年不同)。这是因为mon的GROUP允许相同的IP在多个月内存在

现在,结果显示基本正确。Month number | usersbymonth,如果你去年进行了目标查询,结果将是12个月前的用户

那么我如何计算用户数的总和呢?

我说得对吗

SELECT mon, SUM(usersbymonth) FROM 
  (SELECT 
  MONTH(VisitTime) AS mon, 
  COUNT( distinct IP) AS usersbymonth
  FROM stats 
  WHERE 
  YEAR( VisitTime) = YEAR(  current_date  )  
  GROUP BY mon)
如果您想要每个月添加
groupbymon
更新

  SELECT 
      MONTH(VisitTime) AS mon, 
      COUNT( distinct IP) AS usersbymonth
  FROM stats 
  WHERE 
      YEAR( VisitTime) = YEAR(  current_date  )  
  GROUP BY mon
  UNION -- Last ROW
  SELECT mon, SUM(usersbymonth) FROM (
    SELECT 
      MONTH(VisitTime) AS mon, 
      COUNT( distinct IP) AS usersbymonth
    FROM stats 
    WHERE 
      YEAR( VisitTime) = YEAR(  current_date  )  
    GROUP BY mon)

因此,如果用户X在1月和3月都来自IP,您只希望将其计为1次访问,而您当前的查询将其计为2次不同的访问?您必须每年进行一次单独的查询和分组,因为每月分组会破坏在这些“不同”访问中进行不同查询的任何机会。显示的基本查询会按照我的要求执行所有操作。3月和1月访问的用户数计为2。我只想把所有月份的总数加起来,这样我就可以在每月统计%的用户是的。结果还可以,但是。。第二种方法和我的方法一样,只是用更复杂的方式。第一个结果就是我要找的数字,但我只希望总数是第13行,或者是一个查询中每行的一个额外列。你的意思是希望最后一行的结果是?是的。这样地。1月50日、2月50日、3月50日等共计150个月,但到了月份仍有差异,因此总和(usersbymonth)将提供正确答案。。但是他**我如何将其实现到查询:)谢谢molderf。现在运行良好,但需要重新思考,因为这是一个非常缓慢的查询。