【问题标题】:Count occurrences of a column with alias in SQL计算 SQL 中具有别名的列的出现次数
【发布时间】:2016-09-12 21:52:48
【问题描述】:

我正在尝试获取名称的计数以及与之关联的 id 例如 姓名:乔恩·史密斯 数量:2 编号: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”无效。 我知道我可以只使用一列来获得所需的结果来获取计数,然后对要放回的剩余列进行子查询。但我需要它来获取名称

【问题讨论】:

  • 名称可能是保留字。尝试更改为全名,或者您可能需要将 ON 位更改为 a.firstname = b.firstname 和 a.lastname = b.lastname 而不是比较连接的部分

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


【解决方案1】:

你可以完全避免加入,少一点复杂:

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

count 不是标量,所以应该可以正常工作。或者只是使用你所拥有的并像上面那样加入名字和姓氏(而不是串联)

【讨论】:

    【解决方案2】:

    您不能在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
    

    【讨论】:

    • 感谢您的快速回复!成功了,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多