表格
create table genre(
genre_id int primary key,
name varchar(50));
create table game(
game_id int primary key,
name varchar(1000),
genre_id int foreign key references genre(genre_id));
create table publisher(
publisher_id int primary key,
name varchar(50));
create table game_publisher(
gpub_id int primary key,
game_id int foreign key references game(game_id),
publisher_id int foreign key references publisher(publisher_id));
create table platform(
platform_id int primary key,
name varchar(50));
create table game_platform(
gplat_id int primary key,
release_year int,
gpub_id int foreign key references game_publisher(gpub_id),
platform_id int foreign key references platform(platform_id));
create table region(
region_id int primary key,
name varchar(50));
create table region_sales(
region_id int foreign key references region(region_id),
gplat_id int foreign key references game_platform(gplat_id),
num_sales decimal(5,2));
**我目前的查询。 它给了我每款游戏的名称、销量和发行年份,但我只想要发行当年北美销量最高的 1 款游戏。**
select gp.release_year, g.name AS game_name, rs.num_sales, r.name AS region_name
from game g inner join game_publisher gpub ON g.game_id = gpub.game_id
inner join game_platform gp ON gpub.gpub_id = gp.gpub_id
inner join region_sales rs ON gp.gplat_id = rs.gplat_id
inner join region r ON rs.region_id = r.region_id
where r.name = 'north America'
group by gp.release_year, g.name, r.name, rs.num_sales
order by rs.num_sales desc;
答案 0 :(得分:0)
您的数据模型没有足够的信息来回答这个问题,因为 sales
中没有日期。
如果有一个“年份”列——或者任何日期——你可以在查询中使用它。然后想法是order by
并选择一行。
select gp.release_year, g.name AS game_name, rs.num_sales, r.name AS region_name
from game g inner join
game_publisher gpub
on g.game_id = gpub.game_id inner join
game_platform gp
on gpub.gpub_id = gp.gpub_id inner join
region_sales rs
on gp.gplat_id = rs.gplat_id inner join
region r
on rs.region_id = r.region_id
where r.name = 'North America' and
gp.release_year = s.sales_year
order by rs.num_sales desc
fetch first 1 row only;
并非所有数据库都支持标准的 fetch first
子句,因此您可能需要 select top
、limit
或其他一些结构。
如果每年有一行区域销售额,则不需要汇总。但是,如果有多行,则需要聚合。