gpt4 book ai didi

sql - 计算包括 0 连接两个具有不同行 postgres 的表

转载 作者:行者123 更新时间:2023-11-29 14:09:26 24 4
gpt4 key购买 nike

我有两个表,users 表包含我系统中的所有用户,另一个名为 action 的表包含用户在我系统中完成的所有操作,我想要得到的是一个查询,我可以在其中计算操作用户,如果我对一个用户没有任何操作,则为 0。

我的两个表:

Users Table:

Name Place
----------------------
James Supermarket
Alex Bank
Ignatius BookShop

Action table:

Name Action
--------------------
James Buy
James Buy
Alex Complaint
Alex Buy
Alex Buy

我想要这样的东西:

Name       Transactions   Place
-------------------------------
James 2 Supermarket
Alex 3 Bank
Ignatius 0 BookShop

我尝试过:

SELECT users.name, 
(SELECT Count(action.name)
FROM action,
users
WHERE action.name = users.name
GROUP BY action.name)
users.place
FROM
action,
users
WHERE action.name = users.name

但总是给我这个错误:

ERROR: more than one row returned by a subquery used as an expression SQL state: 21000

知道怎么做吗?

最佳答案

永远不要FROM 子句中使用逗号。始终使用正确、明确的 JOIN 语法。也就是说,如果您想使用相关子查询,则此查询根本不需要任何连接:

SELECT u.name, 
(SELECT Count(*)
FROM action a
WHERE a.name = u.name
) as cnt,
u.place
FROM users u;

为了提高性能,您需要在 action(name) 上建立索引。使用这样的索引,这可能比使用 left joingroup by 的替代版本更快。

注意事项:

  • 所有的表都有表别名,是表名的缩写。
  • 此版本的查询不需要连接。
  • 子查询中没有group by
  • 外部查询中不需要where子句。

关于sql - 计算包括 0 连接两个具有不同行 postgres 的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47752745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com