我的数据库中有一个表,用于存储以下游戏的数据:
id int
name Varchar
year_of_release Year
other_sales DOUBLE(10,2) #Sales volume in Asia, Europe, and Australia
global_sales DOUBLE(10,2) #Amount of sales in the world
我想提出一个我在下面提到的查询: 名称、出版年份、亚洲、欧洲、澳大利亚销量、全球销量;首先,发表年份为2000年以后的结果中出现行。出版年份在2000年以后的系列应按全球销量降序排列,出版年份在2000年之前的系列应按亚洲、欧洲和澳大利亚销量降序排列。最后如果有全球销量相同或者亚洲、欧洲、澳洲销量相同的行,则按游戏ID升序排序。
下面的代码是我的查询:
SELECT id, name, year_of_release, other_sales , global_sales
FROM games
order by case
when year_of_release >= 2000 then global_sales
when year_of_release< 2000 then other_sales
end desc, id asc;
当我运行上面的代码时,它返回 2000 年之后发布的对象,并且不返回 2000 年之前发布的对象
你能帮我找出问题所在吗?
您应该首先按分隔两组结果的条件进行排序。然后在每个组中,您按适当的销售额进行订购。
ORDER BY year_of_release < 2000 ASC,
CASE WHEN year_of_release >= 2000 THEN global_sales
ELSE other_sales
END DESC,
id ASC
条件的值为 true 时为
1
或 false 时为 0
,您可以以此排序。
您对问题的描述似乎不正确,因为
ORDER BY
不会删除结果。所以它应该会返回所有年份,只是不按照您预期的顺序。