我有这个问题:
select
id,
count(1) as "visits",
count(distinct visitor_id) as "visitors"
from my_table
where timestamp > '2016-01-14'
group by id
order by "visits", "visitors"
有效。
如果我改用这个
select
id,
count(1) as "visits",
count(distinct visitor_id) as "visitors"
from my_table
where timestamp > '2016-01-14'
group by id
order by (("visits") + ("visitors"))
我得到了
列“访问”不存在
如果我换到 选择 ID, 将(1)计为“访问”, 将(distinct visitor_id)计为“访客” 来自my_table 其中时间戳> “2016年1月14日” 按ID分组 按次数排序(1)+计数(distinct visitor_id)
它再次起作用。
为什么它适用于示例1和3,但不适用于示例2?有没有办法通过两列的总和使用它们的别名来订购?
我能想到的替代方案:
PS:此查询是玩具查询。真正的一个要复杂得多。我想按顺序重用select语句中计算的值,但是所有这些总结在一起。
答案 0 :(得分:2)
未定义表达式评估顺序。如果在别名之前评估visits + visitors
表达式,则会出现上面显示的错误。
答案 1 :(得分:0)
尝试使用实际列而不是使用别名尝试将类型更改为varchar或nvarchar,并且我的意思是:
select
id,
count(1) as "visits",
count(distinct visitor_id) as "visitors"
from my_table
where timestamp > '2016-01-14'
group by id
order by (CAST(count(1) AS VARCHAR) + CAST(count(distinct visitor_id) AS VARCHAR))