mysql - 查询获取 12 个月内 TOP 3 行

标签 mysql group-by sql-order-by

我目前使用 MySQL 作为我的数据库。 我想检索所有 12 个月内发布最多 COUNTTOP 3 主题。 因此,我的结果通常会给出 36 行(1 月前 3 名、2 月前 3 名...等)

帖子表

CREATE TABLE IF NOT EXISTS `Post` (
  `post_id` VARCHAR(16) NOT NULL,
  `staff_id` INT NOT NULL,
  `topic_id` INT NOT NULL,
  `status_id` INT NOT NULL,
  `post_title` VARCHAR(100) NOT NULL,
  `post_date_time` DATETIME NOT NULL,
  `description` VARCHAR(1000) NOT NULL,
  `latest_update` DATETIME NULL,
  `approval` INT NULL,
  `approval_date` DATE NULL,
  PRIMARY KEY (`post_id`),
  INDEX `fk_Post_Staff(User)1_idx` (`staff_id` ASC),
  INDEX `fk_Post_Topic1_idx` (`topic_id` ASC),
  INDEX `fk_Post_Status1_idx` (`status_id` ASC),
  CONSTRAINT `fk_Post_Staff(User)1`
    FOREIGN KEY (`staff_id`)
    REFERENCES `staff` (`staff_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_Post_Topic1`
    FOREIGN KEY (`topic_id`)
    REFERENCES `Topic` (`topic_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_Post_Status1`
    FOREIGN KEY (`status_id`)
    REFERENCES `Status` (`status_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

最佳答案

select floor(period/100) `year`, period%100 `month`, topic_id 
   from 
     (select @n := if(@m=period, @n:=@n+1, @n:=1) n, @m:=period period, topic_id
        from 
          (select year(post_date_time)*100+month(post_date_time) period,
                  topic_id, count(post_id) count 
             from post 
           group by period, topic_id 
           order by period, count desc) t1, 
          (select @n:=1) tn, 
          (select @m:=0) tm ) t2 
   where n<4

Demo for simplified data

可以通过写在尾部来设置数据的周期,例如

having `year` = 2015 and `month` between 1 and 6

关于mysql - 查询获取 12 个月内 TOP 3 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31805225/

相关文章:

mysql 计数分组

python - pandas groupby 计数共存

mysql - 如何使用变量 SET 在 MySQL 中使用 ORDER BY

mysql - 如何在MYSQL中查询具有相同时间戳的记录?

php - 如何显示mysql 27天之前的数据?

mysql 如何在有或没有事务的情况下在 20 分钟后回滚已删除的表?

mysql - 在 MYSQL 中分组之前如何对数据进行排序

MYSQL 双值舍入查询

java - 使用 Java 在 Spark 2.0 中使用数据集的 GroupByKey

php - 如何在 foreach 循环内进行 ORDER BY?