【问题标题】:COALESCE w/ mySQL when Vaue is NULL当值为 NULL 时与 SQL 合并
【发布时间】:2013-11-23 20:59:03
【问题描述】:

我有以下 sql,它应该为给定用户返回 tbl_userbets 中所有值的总和或 0(如果为 Null)。

select userid, COALESCE(SUM(bet),0) as Sum from `tbl_userbets`
where userid in (1289, 1305, 1315) and graded is not null
group by userid
order by userid

ID 1289 和 1305 在 tbl_userbets 中没有价值,我希望返回以下内容

用户名 |和 第1289章0 1305 | 0 第1315章1000

但我只得到了 1315 的回报。

感谢任何帮助。

【问题讨论】:

  • “ID 1289 和 1305 在 tbl_userbets 中没有值”是否意味着这些 id 没有记录,或者它们有记录但所有这些 id 的值都为空?
  • 可能是或者,在这种情况下,它们现在不在该表中。
  • 你不能总结不存在的东西 :) 你是怎么想出这些 ID 的?是你编出来的吗?
  • 说来话长,但这些 ID 与登录到我的应用程序的用户有关。无论如何,在运行该查询之前不必检查值是否存在?

标签: mysql sql coalesce


【解决方案1】:

这样的事情应该可以工作。

select u.userid
, COALESCE(SUM(bet),0) as Sum 
from tbl_users u left join tbl_userbets ub on u.userid = ub.userid
and ub.graded is not null
where u.userid in (1289, 1305, 1315) 
group by u.userid
order by u.userid

不过,您必须使用正确的表名。我只是猜测。

【讨论】:

    【解决方案2】:

    首先,你有一个由内而外的表达式。改变这个:

    COALESCE(SUM(bet),0)
    

    到这里:

    SUM(COALESCE(bet,0))
    

    如果您不这样做,则表中用户的 any 值为 NULL 将导致记录的 整个总和为 0。

    至于为什么这些记录完全丢失,投注表中可能根本没有记录。使用 IN() 表达式不会使这些结果出现。你仍然需要一些记录来匹配。为实现这一点,JOIN 使用了一张保证数据库中每个用户都有记录的表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-28
      • 2016-04-10
      • 2018-10-10
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      相关资源
      最近更新 更多