sql 有 max(count()) return 零行
sql HAVING max(count()) return zero rows
我正在尝试获得 class 课程安排重叠的房间,我的 tables: 课程:
COURSE_ID NAME
11 matematika
22 logika
33 himiya
44 sport
55 algoritmika
66 hedva
77 algebra linearit
日程安排:
ID COURSE_ID ID_ROOM DAY HOUR
1 11 105 Mon 10am
2 11 105 Wen 10am
3 11 105 Thu 10am
4 22 105 Mon 10am
5 22 205 Wen 10am
6 22 105 Thu 10am
7 33 305 Mon 11am
8 33 105 Mon 10am
class_room:
ID_ROOM LOCATION CAPACITY
105 A 20
205 B 10
305 C 30
我的 sql 是:
select class_room.ID_ROOM as crid, class_room.LOCATION, schedule.DAY as d, schedule.HOUR as h, count(courses.COURSE_ID) as count
from schedule
natural join class_room
natural join courses
group by crid, d, h
order by count desc;
我得到:
crid LOCATION d h count
105 A Mon 10am 3
105 A Thu 10am 2
305 C Mon 11am 1
105 A Wen 10am 1
205 B Wen 10am 1
但我只需要显示计数的所有最大值(现在只有 1 个这样的行)。
我试过了
select class_room.ID_ROOM as crid, class_room.LOCATION, schedule.DAY as d, schedule.HOUR as h, count(courses.COURSE_ID) as count
from schedule
natural join class_room
natural join courses
group by crid, d, h
having max(count)
order by count desc;
但是return是空的table。
怎么了?或者,也许是另一种解决方案的建议,以获得我需要的东西?
这将 return 具有最高计数的所有行:
select ID_ROOM as crid, DAY as d, HOUR as h,
count(*) as cnt
from schedule
group by crid, d, h
having
count(*)
= ( select count(*) as cnt
from schedule
group by ID_ROOM, DAY, HOUR
order by cnt desc
limit 1
)
现在加入 class_room
以获得 location
以下将 return 所有组匹配最大计数
select class_room.ID_ROOM as crid
, class_room.LOCATION
, schedule.DAY as d
, schedule.HOUR as h
, count(courses.COURSE_ID) as count
from schedule
natural join class_room
natural join courses
group by
crid, d, h
having count(*) = (
select max(count)
from (
select count(courses.COURSE_ID) as count
from schedule
natural join class_room
natural join courses
group by
id_room, day, hour
) maxcount
)
我正在尝试获得 class 课程安排重叠的房间,我的 tables: 课程:
COURSE_ID NAME
11 matematika
22 logika
33 himiya
44 sport
55 algoritmika
66 hedva
77 algebra linearit
日程安排:
ID COURSE_ID ID_ROOM DAY HOUR
1 11 105 Mon 10am
2 11 105 Wen 10am
3 11 105 Thu 10am
4 22 105 Mon 10am
5 22 205 Wen 10am
6 22 105 Thu 10am
7 33 305 Mon 11am
8 33 105 Mon 10am
class_room:
ID_ROOM LOCATION CAPACITY
105 A 20
205 B 10
305 C 30
我的 sql 是:
select class_room.ID_ROOM as crid, class_room.LOCATION, schedule.DAY as d, schedule.HOUR as h, count(courses.COURSE_ID) as count
from schedule
natural join class_room
natural join courses
group by crid, d, h
order by count desc;
我得到:
crid LOCATION d h count
105 A Mon 10am 3
105 A Thu 10am 2
305 C Mon 11am 1
105 A Wen 10am 1
205 B Wen 10am 1
但我只需要显示计数的所有最大值(现在只有 1 个这样的行)。 我试过了
select class_room.ID_ROOM as crid, class_room.LOCATION, schedule.DAY as d, schedule.HOUR as h, count(courses.COURSE_ID) as count
from schedule
natural join class_room
natural join courses
group by crid, d, h
having max(count)
order by count desc;
但是return是空的table。 怎么了?或者,也许是另一种解决方案的建议,以获得我需要的东西?
这将 return 具有最高计数的所有行:
select ID_ROOM as crid, DAY as d, HOUR as h,
count(*) as cnt
from schedule
group by crid, d, h
having
count(*)
= ( select count(*) as cnt
from schedule
group by ID_ROOM, DAY, HOUR
order by cnt desc
limit 1
)
现在加入 class_room
以获得 location
以下将 return 所有组匹配最大计数
select class_room.ID_ROOM as crid
, class_room.LOCATION
, schedule.DAY as d
, schedule.HOUR as h
, count(courses.COURSE_ID) as count
from schedule
natural join class_room
natural join courses
group by
crid, d, h
having count(*) = (
select max(count)
from (
select count(courses.COURSE_ID) as count
from schedule
natural join class_room
natural join courses
group by
id_room, day, hour
) maxcount
)