Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 当有联接时,如何从多个表中进行选择?_Sql_Postgresql - Fatal编程技术网

Sql 当有联接时,如何从多个表中进行选择?

Sql 当有联接时,如何从多个表中进行选择?,sql,postgresql,Sql,Postgresql,我有一个当前的查询,它为我提供了一个用户ID和计数表,但我希望该表更具描述性。此查询工作正常: SELECT a.user_id, count(*) FROM table_a a JOIN table_b b ON b.user_id = a.user_id WHERE <some condition> AND <some condition> AND b.account_created_at < a.account_created_at GROUP

我有一个当前的查询,它为我提供了一个用户ID和计数表,但我希望该表更具描述性。此查询工作正常:

SELECT a.user_id, count(*) FROM table_a a
JOIN table_b b ON b.user_id = a.user_id
WHERE <some condition>
    AND <some condition>
    AND b.account_created_at < a.account_created_at
GROUP BY a.user_id
ORDER BY count DESC;
其中,除最后两列以外的所有列都来自
表b


我如何才能做到这一点?

您需要group by中的列不在聚合函数中

SELECT a.user_id, b.organization, b.first_name, b.last_name, b.alias, count(*) 
FROM table_a a
JOIN table_b b ON b.user_id = a.user_id
WHERE <some condition>
    AND <some condition>
    AND b.account_created_at < a.account_created_at
GROUP BY a.user_id, b.organization, b.first_name, b.last_name, b.alias
ORDER BY count DESC;
选择a.user\u id、b.organization、b.first\u name、b.last\u name、b.alias、count(*)
从表a
在b.user\u id=a.user\u id上联接表
哪里
及
和b.账户创建时间
或者为这些列添加聚合函数

SELECT a.user_id, max(b.organization), max(b.first_name), max(b.last_name), max(b.alias), count(*) 
FROM table_a a
JOIN table_b b ON b.user_id = a.user_id
WHERE <some condition>
    AND <some condition>
    AND b.account_created_at < a.account_created_at
GROUP BY a.user_id, b.organization, b.first_name, b.last_name, b.alias
ORDER BY count DESC;
选择a.user\u id、max(b.organization)、max(b.first\u name)、max(b.last\u name)、max(b.alias)、count(*)
从表a
在b.user\u id=a.user\u id上联接表
哪里
及
和b.账户创建时间
选择部分中除计数之外的所有项目也应在查询的分组部分中

SELECT a.user_id, b.organization, b.first_name, b.last_name, b.alias, count(*) FROM 
table_a a
JOIN table_b b ON b.user_id = a.user_id
WHERE <some condition>
AND <some condition>
AND b.account_created_at < a.account_created_at
GROUP BY a.user_id,b.organization, b.first_name, b.last_name, b.alias
ORDER BY count DESC
从中选择a.user\u id、b.organization、b.first\u name、b.last\u name、b.alias、count(*)
表a
在b.user\u id=a.user\u id上联接表
哪里
及
和b.账户创建时间
max(b.organization)是什么意思?这是一个字符串的最大值(例如-StackOverflow)?还有一个字符串的最大值。。无论如何,如果db引擎需要聚合函数,则必须使用可用的。。在这种情况下,是伪聚集函数。。只是为了避免由于缺少聚合函数而导致的错误,byOkay组中的列将只返回与表A中的用户id关联的组织、名字、姓氏和别名(在表B中),对吗?是。。根据您在
中与b.user\u id=a.user\u id上的表a连接表b的关系
SELECT a.user_id, max(b.organization), max(b.first_name), max(b.last_name), max(b.alias), count(*) 
FROM table_a a
JOIN table_b b ON b.user_id = a.user_id
WHERE <some condition>
    AND <some condition>
    AND b.account_created_at < a.account_created_at
GROUP BY a.user_id, b.organization, b.first_name, b.last_name, b.alias
ORDER BY count DESC;
SELECT a.user_id, b.organization, b.first_name, b.last_name, b.alias, count(*) FROM 
table_a a
JOIN table_b b ON b.user_id = a.user_id
WHERE <some condition>
AND <some condition>
AND b.account_created_at < a.account_created_at
GROUP BY a.user_id,b.organization, b.first_name, b.last_name, b.alias
ORDER BY count DESC