通过postgres选择备用字段名称组

问题描述 投票:0回答:1

actor表架构

actor_id | first_name | last_name

我有疑问

select a.actor_id, t.name,count(*) from actor a
LEFT JOIN 
(select fa.actor_id,fa.film_id,c.name  from film_actor fa
LEFT JOIN film_category fc ON fc.film_id=fa.film_id 
INNER JOIN category c ON c.category_id=fc.category_id
ORDER BY fa.film_id) t ON t.actor_id=a.actor_id
GROUP BY a.actor_id, t.name
ORDER BY a.actor_id

我得到了田野的结果

actor_id | name | count

我还想从first_name表中包含last_nameactor,但我无法做到,因为我只能选择那些在group by子句中的列名。我希望first_name last_name在选择记录中而不是在组中添加它

我想要我的结果

first_name last_name | actor_id | name | count
postgresql
1个回答
0
投票

您可以将列放在GROUP BY子句中:

SELECT a.first_name, a.last_name, a.actor_id, t.name,count(*) 
FROM actor a
LEFT JOIN (
    SELECT fa.actor_id,fa.film_id,c.name  
    FROM film_actor fa
    LEFT JOIN film_category fc 
    ON fc.film_id=fa.film_id 
    INNER JOIN category c 
    ON c.category_id=fc.category_id
    ORDER BY fa.film_id) t 
ON t.actor_id=a.actor_id
GROUP BY a.first_name, a.last_name, a.actor_id, t.name
ORDER BY a.actor_id

您可以使用concat()format()或运算符||来连接字符串(请参阅String Functions and Operators),例如:

SELECT concat(a.first_name, ' ', a.last_name), a.actor_id, t.name,count(*) 
...
© www.soinside.com 2019 - 2024. All rights reserved.