SQL Server中使用CASE语句的MIN MAX
我有一张这样的桌子。我想要的是国家名称、人口数量,如果人口数量为MAX,则将其标记为MAX,类似地,将其标记为MIN。我已使用SQL Server中使用CASE语句的MIN MAX,sql,sql-server,case-statement,Sql,Sql Server,Case Statement,我有一张这样的桌子。我想要的是国家名称、人口数量,如果人口数量为MAX,则将其标记为MAX,类似地,将其标记为MIN。我已使用CASE语句在SQL Server中编写了以下查询 /* MIN/MAX Population amongst the countries */ SELECT country, population, CASE WHEN population == MIN(population) THEN "MIN" WHEN popul
CASE
语句在SQL Server中编写了以下查询
/* MIN/MAX Population amongst the countries */
SELECT
country, population,
CASE
WHEN population == MIN(population) THEN "MIN"
WHEN population == MAX(population) THEN "MAX" ELSE "NA"
END as "pop_stats"
FROM
countries_by_population;
使用over()
使其成为无分区的窗口函数:
SELECT country, population,
CASE
WHEN population = MIN(population) over() THEN 'MIN'
WHEN population = MAX(population) over() THEN 'MAX'
ELSE 'NA'
END as pop_stats
FROM countries_by_population;
首先,您应该通过如下方式存储@Min\u Population
和@Max\u Population
DECLARE @Min_Population decimal(18,2), @Max_Population decimal(18,2)
SELECT @Min_Population = MIN(population), @Max_Population = MAX(population)
FROM countries_by_population
之后,您可以比较每个项目的值,如(请注意,SQL中的字符在单引号中关闭,而不是在双引号中关闭)
完整查询
DECLARE @Min_Population decimal(18,2), @Max_Population decimal(18,2)
SELECT @Min_Population = MIN(population), @Max_Population = MAX(population)
FROM countries_by_population
SELECT country, population,
CASE
WHEN population = @Min_Population THEN 'MIN'
WHEN population = @Max_Population THEN 'MAX' ELSE 'NA'
END as pop_stats
FROM countries_by_population;
您可以使用一个窗口分析函数,如
densite\u RANK()
,包括降序
和升序
(默认)中的按人口顺序
子句,通过分别将值返回为1
,来确定MIN
和MAX
值,为了能够在案例中使用
语句
(densite_RANK()
函数返回满足ties
极值间发生情况中相关条件的多行)
顺便说一句,不要对派生列值使用双引号,而是使用单引号
您应该将示例数据和相应的结果作为文本而不是图像提供给我们您的语法有太多错误。例如:==,“最小值”(双引号)等。请检查again@Phong. 更正了“==”和双引号。谢谢。这回答了你的问题吗?如果您需要帮助,请告诉我@rushikesh maheshwari
DECLARE @Min_Population decimal(18,2), @Max_Population decimal(18,2)
SELECT @Min_Population = MIN(population), @Max_Population = MAX(population)
FROM countries_by_population
SELECT country, population,
CASE
WHEN population = @Min_Population THEN 'MIN'
WHEN population = @Max_Population THEN 'MAX' ELSE 'NA'
END as pop_stats
FROM countries_by_population;
SELECT country, population,
CASE
WHEN DENSE_RANK() OVER ( ORDER BY population ) = 1 THEN 'MIN'
WHEN DENSE_RANK() OVER ( ORDER BY population DESC ) = 1 THEN 'MAX' ELSE 'NA'
END AS "pop_stats"
FROM countries_by_population
ORDER BY population DESC