mysql 具有...> avg() 无法按预期工作

Flo*_*ell 1 mysql average having

我创建了两个视图来帮助计算 user_diary_number,然后选择日记数 > 用户总 user_diary_number 平均值的用户。

两个视图如下:

create view user_diary_number as
(
select user_id,count( distinct diary_id ) as diary_num
from user_diary

group by user_id
);
Run Code Online (Sandbox Code Playgroud)

第二次使用havingand avg

create view hw_diary as
(
select u.user_id, u.realname, ud.diary_num, school.school_name
from (user as u cross join user_diary_number as ud on u.user_id = ud.user_id )cross join school on u.school_id = school.school_id
having diary_num > avg(diary_num)

);
Run Code Online (Sandbox Code Playgroud)

现在的问题是什么,第二个视图只有 1 行结果。当然,我们有超过 1 个用户的日记数量 > 平均 diary_num。事实上,我总共有 251 篇日记和 103 个用户。一些用户有9、4、5本日记。但结果只有 1 个用户拥有 3 篇日记。

我的相关表格是:

CREATE TABLE IF NOT EXISTS `school` (
  `school_id` int(11) NOT NULL,
  `school_name` varchar(45) NOT NULL,
  `location` varchar(45) NOT NULL,
  `master` varchar(45) NOT NULL,
  `numbers_of_student` int(11) NOT NULL,
  PRIMARY KEY (`school_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `user_diary` (
  `diary_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `title` varchar(45) NOT NULL,
  `content` varchar(255) NOT NULL,
  `addtime` DATETIME NOT NULL,
  PRIMARY KEY (`diary_id`,`user_id`),
  KEY `fk_diary_user_id_idx` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Run Code Online (Sandbox Code Playgroud)

交叉连接有问题吗?或者是其他东西?多谢!

pro*_*aes 5

你不能这样使用 avg 。在我的个人电影数据库中,

select * from movie having year > avg(year);
Run Code Online (Sandbox Code Playgroud)

什么也不产生,并且

select * from movie having year > (select avg (year) from movie);
Run Code Online (Sandbox Code Playgroud)

产生预期的结果。