带有 CASE 语句和窗口函数的比较运算符

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

我尝试将 case 函数与窗口函数一起使用,但我得到的数据没有相加。一切似乎都正常,但我只收到整个 CASE 功能的“高于平均水平”,所以我知道有些事情不太对劲。我希望每一行都能表明这些销售额是否高于、低于或等于该城市的平均水平。

我觉得这是一个简单的语法问题,但我不知道我错在哪里。请帮忙!


select 
    *,
case
    when total_sales > "City Average Total Sales" then "Above Average"
    when total_sales < "City Average Total Sales" then "Below Average"
    when total_sales = "City Average Total Sales" then "Equal to Average"
end as "Sales Tracking"
from (
    select 
        *,
        round(total_sales / Population, 0) AS "Revenue Over Residents",
        round(avg(total_sales) over (Partition by city), 2) as "City Average Total Sales"
    from nm_cannabis_sales_population) a;

再次,我得到了整列的高于平均水平的结果,如果有帮助的话,我正在使用 MySQL。

sql case window-functions
1个回答
0
投票

问题是您正在将一个值(例如“100”)与字符串“城市平均总销售额”(而不是名为“城市平均总销售额”的列)进行比较。)

要解决歧义,您可以对列名称使用反引号,例如:

case
    when total_sales > `City Average Total Sales` then "Above Average"
    when total_sales < `City Average Total Sales` then "Below Average"
    when total_sales = `City Average Total Sales` then "Equal to Average"
end as "Sales Tracking"

您可以在这个小提琴中看到问题和解决方案

请注意,您可以通过将 您的 sql 模式设置为 ANSI_QUOTES 来避免这种情况。这样 MySQL 就会按照我认为你期望的方式处理双引号。

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