PostgreSQL SUM不会返回0行的值应该怎么解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (62)

有一个事务表,每个事务都有一个地址字段,引用地址表中的一行,地址表中的每个地址都有一个coinID。

想为特定用户获得每笔硬币的所有交易的总和。

我遇到的问题是,如果用户有0个属于某个特定硬币的交易或地址,则结果完全缺失。需要一张硬币表中有0个交易或地址的所有硬币返回总数为0。

SELECT coins.name, SUM(transactions.amount),coins.price_usd
            FROM coins
            LEFT JOIN addresses ON addresses.coin_id = coins.id
            LEFT JOIN transactions ON transactions.address = addresses.address
            LEFT JOIN users ON transactions.user_id = users.id
            WHERE users.email = 'testemail@email.com'
            GROUP BY coins.name, coins.price_usd
提问于
用户回答回答于

过滤条件错误。你把它放在WHERE子句中,应该放在JOIN子句中。

将条件放入WHERE子句中时,将有效地将外部联接转换为内部联接

如下所示:

SELECT coins.name, SUM(transactions.amount),coins.price_usd
            FROM coins
            LEFT JOIN addresses ON addresses.coin_id = coins.id
            LEFT JOIN transactions ON transactions.address = addresses.address
            LEFT JOIN users ON transactions.user_id = users.id
                  AND users.email = 'testemail@email.com'
            GROUP BY coins.name, coins.price_usd

扫码关注云+社区

领取腾讯云代金券