为什么我无法在sql中使用case语句过滤数据?

问题描述 投票:0回答:1

我的数据库中有一个表,用于存储以下游戏的数据:

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 年之前发布的对象

你能帮我找出问题所在吗?

sql mysql filter case
1个回答
0
投票

您应该首先按分隔两组结果的条件进行排序。然后在每个组中,您按适当的销售额进行订购。

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
不会删除结果。所以它应该会返回所有年份,只是不按照您预期的顺序。

© www.soinside.com 2019 - 2024. All rights reserved.