繁体   English   中英

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

[英]Count occurrences of a column with alias in SQL

我正在尝试获取名称及其相关ID的计数,例如Name:Jon Smith cnt:2 ID:1

第二条约翰史密斯记录将具有与之关联的其他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给出错误,指出无效的列名“名称”。 我知道我可以只使用一列就可以得到所需的结果,然后对剩余的列进行子查询。但是我需要它来命名

您不能在JOIN条件中使用别名。 您可以先将其放在子查询中,也可以使用连接的列,如下所示:

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 b
GROUP BY firstname, lastname
) b
    ON CONCAT(a.firstname, ' ', a.lastname) = b.bname

您可以完全避免加入,这有点麻烦:

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

计数不是标量,因此应正常工作。 或仅使用您拥有的内容,然后按上述方式将联接设为名字和姓氏(而不是串联)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM