我尝试将 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。
问题是您正在将一个值(例如“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 就会按照我认为你期望的方式处理双引号。