如何在一个表中显示多行,另一表中的一行显示为单行

Posted

技术标签:

【中文标题】如何在一个表中显示多行,另一表中的一行显示为单行【英文标题】:How display multiple rows in a table with one row in another table as single row 【发布时间】:2011-12-14 06:16:57 【问题描述】:

我有两张桌子。 表“用户”包含 user_id、user_name 表“事务”包含 user_id、事务

例如:

TABLE USER:
user_id, user_name
1, Ram
2, John
3, Rahim

TABLE Transactions
user_id, transactions
1,  500
1, 300
2, 250
1, 450
3, 100
1, 250
3, 50

我想将结果显示为:

user_name, Total
Ram, 1500*
John, 250
Rahim, 150
它是该特定用户的所有交易的总和

我该怎么做?

【问题讨论】:

我的问题有误。我的结果应该是:user_id,Total。 (不是用户名,总计)抱歉给您造成了困扰。 帖子已编辑。无论如何,我认为你得到了正确的答案。 再次抱歉。在重写我的评论之前,我只是按了“回车”键。我需要用户名,总计(例如:Ram,1500)。请忽略我最后的评论。再次为我的错误道歉 好吧,所以创世纪的答案是正确的。 非常感谢! ***.com 摇滚 【参考方案1】:
SELECT 
    u.user_name, 
    SUM(t.transactions) Total
FROM users u
LEFT JOIN transactions t ON t.user_id = u.user_id
GROUP BY t.user_id

我认为你应该使用 LEFT JOIN 因为它应该在任何情况下选择用户的总数(NULL),即使它是 0

【讨论】:

如果用户想要的所有数据都在同一个表中,为什么还需要连接? 似乎是这样,但正如您所看到的,在他的示例中,他输入的是 user_id 而不是 user_name。我也很困惑。 @Aur 是的,如果他想要 user_id,你的回答很好。我们会看到 谢谢。我问是因为你的回答很好,是我在意识到这个例子之前的第一个想法。 我知道如何显示单个表中的字段。但是我错误地写了我的问题。我需要用户名,总计(例如:Ram,1500)。【参考方案2】:
SELECT u.user_id , SUM(t.transactions) AS total
FROM user AS u JOIN transactions AS t
GROUP BY u.user_id

【讨论】:

【参考方案3】:

试试

SELECT
    u.user_id,
    sum(t.transactions) as total
FROM
    user u
    JOIN transactions t ON u.user_id = t.user_id
GROUP BY
    u.user_id

【讨论】:

以上是关于如何在一个表中显示多行,另一表中的一行显示为单行的主要内容,如果未能解决你的问题,请参考以下文章

如何将多行合并为表中的单行

Datatable C# - 如何根据 ID 从一个表中获取详细记录及其关联的另一表中的子记录

如何解决ORACLE中表一得列名的别名为另一表中的某一字段的值?

excel 将所有符合条件的数据显示在另一表中

vlookup函数基本使用--如何将两个Excel表中的数据匹配;excel表中vlookup函数使用方法将一表引到另一表

连接两个表,其中一个表包含多行,这些行引用另一表 PSQL 中的一行