Mysql 每月获取前5项记录及其计数
我用的是phpmyadmin。 我有一个叫malicioussite的电话。它包括两列调用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
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可以解决此问题?请参阅