Sql 当有联接时,如何从多个表中进行选择?
我有一个当前的查询,它为我提供了一个用户ID和计数表,但我希望该表更具描述性。此查询工作正常: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
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