计算SQL中具有别名的列的出现次数

时间:2016-05-17 00:28:25

标签: mysql sql sql-server sql-server-2008 sql-server-2012

我正在尝试计算名称和与之关联的ID 例如 姓名:乔恩史密斯 cnt:2 Id:1

第二个John Smith记录将有一个与之关联的不同ID。

我已经看过其他建议的解决方案并且已经走到了这一步:

select a.id, concat(a.firstname,' ',a.lastname) as name, b.cnt 
from table a
join (select concat(firstname,' ',lastname) as bname, count(*) as cnt 
            from table by firstname,lastname) b 
on a.name=b.bname

但是,sql发出一个错误,指出无效的列名'name'。 我知道只需使用一列来获取计数就可以得到所需的结果,然后为剩下的列做一个子查询。但是我需要它用于名称

2 个答案:

答案 0 :(得分:2)

您无法在ServerAliveInterval条件下使用别名。您可以先将其放在子查询中,也可以使用连接列:

root@server:~# sudo sshd -T
/etc/ssh/sshd_config: line 31: Bad configuration option: ServerAliveInterval
/etc/ssh/sshd_config: terminating, 1 bad configuration options
root@server:~# ssh -V
OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.7, OpenSSL 1.0.1f 6 Jan 2014

答案 1 :(得分:0)

你可以完全避免加入,不那么复杂:

Select 
  a.id
  ,concat(a.firstname,' ',a.lastname) as name
  , (select 
        count(*)  
     from table b 
     where a.firstname = n.firstname
     and a.lastname = b.lastname)
from table a
数不是标量,所以shoudl工作正常。或者只是使用你拥有的东西,并按上面的方式连接名字和姓氏(而不是连接)