SQL Server中使用CASE语句的MIN MAX

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

我有一张这样的桌子。我想要的是国家名称、人口数量,如果人口数量为MAX,则将其标记为MAX,类似地,将其标记为MIN。我已使用
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