SQL Server,有关“无效的列名”的基本问题

时间:2019-12-20 20:59:15

标签: sql-server

这是我的代码:

select 
    h.hacker_id, h.name,
    count(c.challenge_id) as num 
from 
    Hackers as h
join 
    challenges as c on h.hacker_id = c.hacker_id
where 
    num = max(num)
group by 
    h.hacker_id, h.name
order by 
    count(c.challenge_id) desc

我只想过滤掉其他结果并保留最大结果,但是在WHERE子句中出现错误:

  

消息207,级别16,状态1,服务器WIN-ILO9GLLB9J0,第9行
  无效的列名“ num”

请帮助

2 个答案:

答案 0 :(得分:0)

  

我只想过滤其他结果,并保留最大计数,

我确实怀疑您确实想要tasksRef

TOP (1) WITH TIES

这将为您提供计数最高的记录。如果存在最重要的关系,则所有这些都会显示在结果集中。

注意:如您在此查询中所见,您可以在select top (1) with ties h.hacker_id, h.name, count(c.challenge_id) as num from Hackers as h join challenges as c on h.hacker_id = c.hacker_id group by h.hacker_id, h.name order by num desc 子句中使用列别名(与order by子句不同)。

答案 1 :(得分:0)

如果您要查找的是每个hackerid的max(num),则不需要过滤器,group by将为您完成此操作:

select h.hacker_id, h.name,count(c.challenge_id) as num 
from Hackers as h
join challenges as c on h.hacker_id = c.hacker_id
group by h.hacker_id, h.name

但是您似乎只是在按照GMB的建议在寻找前1名。