Mysql 每月获取前5项记录及其计数

Mysql 每月获取前5项记录及其计数,mysql,sql,Mysql,Sql,我用的是phpmyadmin。 我有一个叫malicioussite的电话。它包括两列调用region,其中包含ISO-3166-1 alpha-2代码,如GB、US和adddate包含其时间戳 SELECT region, COUNT(*) AS total FROM malicioussite GROUP BY region ORDER BY COUNT(*) DESC LIMIT 5 它给了我表格中前五名的记录,这是正确的: region total JP 7 US

我用的是phpmyadmin。 我有一个叫malicioussite的电话。它包括两列调用
region
,其中包含ISO-3166-1 alpha-2代码,如GB、US和
adddate
包含其时间戳

SELECT region, COUNT(*) AS total 
FROM malicioussite 
GROUP BY region
ORDER BY COUNT(*) DESC LIMIT 5
它给了我表格中前五名的记录,这是正确的:

region total
JP      7
US      6
RU      5
CN      4
DE      3
现在我想得到前五名的记录和它在过去6个月每月的数量

SELECT region, MONTH(adddate) as Month, count(*) as Total
FROM malicioussite
where adddate BETWEEN DATE_FORMAT(NOW()-INTERVAL 5 MONTH, '%Y-%m-01 00:00:00') AND DATE_FORMAT(LAST_DAY(NOW()), '%Y-%m-%d 23:59:59')
GROUP BY YEAR(adddate), MONTH(adddate), region
region  Month  Total
  AQ      9      1
  AR     10      1
  KR     11      1
  GB     12      1
  HK     12      1
  JP     12      1
  US     12      1
  AS      1      1
  HK      1      1
  JP      1      2
  US      1      1
  CN      2      4
  DE      2      3
  JP      2      4
  RU      2      5
  US      2      4
它给了我所有的地区和过去6个月每月的计数

SELECT region, MONTH(adddate) as Month, count(*) as Total
FROM malicioussite
where adddate BETWEEN DATE_FORMAT(NOW()-INTERVAL 5 MONTH, '%Y-%m-01 00:00:00') AND DATE_FORMAT(LAST_DAY(NOW()), '%Y-%m-%d 23:59:59')
GROUP BY YEAR(adddate), MONTH(adddate), region
region  Month  Total
  AQ      9      1
  AR     10      1
  KR     11      1
  GB     12      1
  HK     12      1
  JP     12      1
  US     12      1
  AS      1      1
  HK      1      1
  JP      1      2
  US      1      1
  CN      2      4
  DE      2      3
  JP      2      4
  RU      2      5
  US      2      4
这部分是正确的,但我想要的只是排名前5位的地区,如下所示:

region  Month  Total
 JP     12      1
 JP      1      2
 JP      2      4
 US     12      1
 US      1      1
 US      2      4
 RU      2      5
 CN      2      4
 DE      2      3

有什么方法可以解决我的问题吗?

您已经完成了所有的工作,只需要添加一个带有子查询的条件

SELECT region, MONTH(adddate) as Month, count(*) as Total
FROM malicioussite
where adddate BETWEEN DATE_FORMAT(NOW()-INTERVAL 5 MONTH, '%Y-%m-01 00:00:00') 
AND DATE_FORMAT(LAST_DAY(NOW()), '%Y-%m-%d 23:59:59')  
AND region IN (SELECT region 
               FROM malicioussite 
               GROUP BY region
               ORDER BY COUNT(*) DESC LIMIT 5)
GROUP BY YEAR(adddate), MONTH(adddate), region
还是加入

SELECT m.region, MONTH(adddate) as Month, count(*) as Total
FROM malicioussite m
JOIN (SELECT region 
      FROM malicioussite 
      GROUP BY region
      ORDER BY COUNT(*) DESC LIMIT 5) as top_reg
ON top_reg.region = m.region
where adddate BETWEEN DATE_FORMAT(NOW()-INTERVAL 5 MONTH, '%Y-%m-01 00:00:00') 
AND DATE_FORMAT(LAST_DAY(NOW()), '%Y-%m-%d 23:59:59')       
GROUP BY YEAR(adddate), MONTH(adddate), m.region
抱歉,bouletta先生,它显示“#1235-此版本的MySQL还不支持‘LIMIT&IN/ALL/ANY/SOME子查询’”,是否有其他sql可以解决此问题?请参阅