我有一个查询,可以获取在某个日期范围内所有在线用户。由于我要如何显示数据,这是通过IN查询完成的。但是,如果找不到解析为IN条件的ID的记录,我想返回一个默认值。
简化查询:
SELECT users.Name, users.ID, SUM(users.Minutes) AS MinutesOnline
FROM UserTable
LEFT JOIN OnlineUseage ON OnlineUseage.ID = UserTable.ID
WHERE OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date <= '2016-12-31 23:59:59'
AND UserTable.ID IN(332,554,5764,11,556,.........)
GROUP BY users.ID
ORDER BY FIELD(UserTable.ID, 332,554,5764,11,556,.........)
现在,上面的查询将仅按预期拉入那些符合条件的行。我还希望查询为不符合条件的IN条件中的ID提取默认值。
IFNULL
在这种情况下使用将不起作用,因为永远不会返回记录
SELECT users.Name, users.ID, IFNULL(SUM(users.Minutes), 0) AS MinutesOnline
FROM UserTable
LEFT JOIN OnlineUseage ON OnlineUseage.ID = UserTable.ID
WHERE OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date <= '2016-12-31 23:59:59'
AND UserTable.ID IN(332,554,5764,11,556,.........)
GROUP BY users.ID
ORDER BY FIELD(UserTable.ID, 332,554,5764,11,556,.........)
仅供参考-我正在将此查询解析为自定义PDO函数。我没有使用过时的mysql函数
您的条件OnlineUseage
是左侧联接变得像内部联接。
将您的条件移至该from
子句会更好:
SELECT
users.Name,
users.ID,
IFNULL(SUM(users.Minutes), 0) AS MinutesOnline
FROM
users
LEFT JOIN OnlineUseage ON
OnlineUseage.ID = users.ID and
OnlineUseage.Date >= '2016-01-01 00:00:00' AND
OnlineUseage.Date <= '2016-12-31 23:59:59'
WHERE
users.ID IN (332,554,5764,11,556,.........)
GROUP BY
users.ID,users.Name
ORDER BY
users.ID
问题内容: 我希望模仿允许用户指定“默认”返回值的内置函数(如)的行为。我最初的尝试是这样做 问题是,如果用户希望成为其返回值,则此函数将引发异常。第二次尝试: 这解决了上述问题,并允许用户指定任何任意值,但是带来了麻烦,因为用户必须始终在其函数调用中进行指定;他们不能只提供最后。同样,可以使用,但如果用户偏爱该语法,则会阻止用户使用。 结合并提供了可行的解决方案,但感觉这需要付出很多努力。它还可
问题内容: 是否可以将此代码转换为Java 8可选单行表达式? 即如果某个对象不为空,我需要调用一个对象方法并返回其结果,否则返回0。 不适合,因为它返回相同类型的对象,但是我需要方法调用的结果或一些默认值。 问题答案: 几种形式: 其中,最后一个不使用Optional(因此不能严格回答您的问题!)更易于阅读,运行时开销也较小,因此应优先使用。 可以说,如果您反转选项,它甚至更简单: …尽管您可能
问题内容: 我有以下选择语句,以获取流的下一个预定项目。如果没有匹配的行,我希望它返回默认值。这是我正在使用的行: 那应该可以获取最近计划的项目,但如果它早于查询之前30分钟,则不会。但是,如果用户未安排任何时间,则我需要一个默认值,以便流中实际播放某些内容。我尝试了以下方法: 和: 但是,如果未找到任何行,它将始终返回空结果。我该如何返回默认值? 问题答案: 一种方法 由于只返回一行,因此可以使
是否可以将此代码转换为Java8可选的单行表达式? i、 如果某个对象不是null,我需要调用一个对象方法并返回其结果,否则返回0<代码>可选。不可数()。orElse()不适合,因为它返回相同类型的对象,但我需要方法调用的结果或一些默认值。
问题内容: 嗨,我正在研究sql zoo教程中的示例#7:SELECT中的SELECT。在以下问题中 “查找属于一个总人口少于2500万的大洲的每个国家。请显示名称,大洲和人口。” 通过使用NOT IN和类似这样的子查询,我得到了正确的答案: 另一方面,如果我使用“ IN”而不是“ NOT IN”和“人口<25000000”,则我没有得到正确的答案,而且我也无法理解为什么,可能有一个简单的原因,我
问题内容: 在Go中,我得到了类型的默认值。在这种情况下,将int初始化为0。 我有一个问题,其中对我来说int中的0可以是一个有效值,因此我需要检查它是由我设置还是被初始化。有什么办法可以告诉他们之间的区别吗? 考虑下面的代码 …我需要能够区分和之间的区别,但是它们看起来一样! 问题答案: 您无法分辨出差异,无法跟踪是否设置了字段(或变量)。 使用指针 您可以使用 值为零的指针,因此,如果未设置