mysql - mysql 的 collesce 问题

标签 mysql coalesce

我有一个非常平坦的表 - tbl_values,其中给定行中有用户 ID 和净金额。在下面的示例中,2280 根据时间戳在过去 30 天内没有记录。

我希望返回 3 行,其中 2280 为“0” - 但我只返回 2 行?我在这里遗漏了一些明显的东西吗?

SELECT userid, (COALESCE(SUM(netAmount),0)) as Sum FROM `tbl_values` where userid in (2280, 399, 2282) and date > (select DATE_SUB(NOW(), INTERVAL 30 day)) GROUP BY userid 

最佳答案

假设您始终想要返回用户,无论他们在 tbl_values 中有匹配的记录,您要寻找的是外部联接:

SELECT u.userid, COALESCE(SUM(v.netAmount),0) as Sum 
FROM (
    SELECT 2280 userid UNION ALL
    SELECT 399 UNION ALL
    SELECT 2282
) u 
    LEFT JOIN `tbl_values` v ON u.userid = v.userid AND
        v.date > DATE_SUB(NOW(), INTERVAL 30 day) 
GROUP BY u.userid 
<小时/>

如果您可能有一个Users 表,那么您可以使用它来代替子查询。

SELECT u.userid, COALESCE(SUM(v.netAmount),0) as Sum 
FROM users u 
    LEFT JOIN `tbl_values` v ON u.userid = v.userid AND
        v.date > DATE_SUB(NOW(), INTERVAL 30 day) 
WHERE u.userid in (2280, 399, 2282)
GROUP BY u.userid 

关于mysql - mysql 的 collesce 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24793821/

相关文章:

sql - 如果没有找到记录则返回零

php - 根据先前的选择隐藏选择框中的选项。从 SQL 生成的选项

用于获取最近价格变化最多的前 1 个产品的 SQL 查询

php - ajax php 下拉列表

mysql - Access 2013 - VBA - 记录集插入获取ID

c# - 我可以在整数上使用合并运算符来链接 CompareTo 吗?

sql - 在查询中找不到匹配项时如何显示默认值?

sql-server - 为什么 T-SQL ISNULL() 会截断字符串而 COALESCE 不会?

mysql - 在 SQL 中运行选择查询时更改属性值

php - 如何从每个项目和mysql查询中获取一行