user_diary_number を計算するのに役立つ 2 つのビューを作成し、日記番号 > 合計ユーザーの user_diary_number の平均であるユーザーを選択しました。
2 つのビューは次のようになります。
create view user_diary_number as
(
select user_id,count( distinct diary_id ) as diary_num
from user_diary
group by user_id
);
そして 2 番目having
に andを使用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)
);
現在の問題は、2 番目のビューには 1 行の結果しかありません。そして絶対に、ダイアリー番号 > 平均 diary_num のユーザーが 1 人以上います。実際、合計 251 個の日記と 103 人のユーザーがいます。一部のユーザーは、9、4、5 の日記を持っています。しかし、結果は 3 つの日記を持っている 1 人のユーザーにのみ表示されます。
私の相対テーブルは次のとおりです。
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 ;
クロス結合に問題はありますか? または、他の何か?どうもありがとう!