【问题标题】:MySQL return max value or null if one column has no value如果一列没有值,MySQL 返回最大值或 null
【发布时间】:2013-08-03 12:30:49
【问题描述】:

我尝试获取 mysql 选择的最大值,但如果有一行不包含时间戳,则希望它为 null/empty/0。

表格统计信息(简化):

   ID   CLIENT   ORDER_DATE      CANCEL_DATE

    1     5      1213567200
    2     5      1213567200
    3     6      1210629600      1281736799
    4     6      1210629600      1281736799
    5     7      1201042800      1248386399
    6     7      1201042800      
    7     8      1205449200      1271282399

我现在正在寻找最低订单日期(没问题,因为它永远不会为空),并且 最大取消日期。如果客户已经取消了他的订阅,则取消日期已填满,但如果他仍然处于活动状态,则根本没有取消日期。

查询:

SELECT ID, min(ORDER_DATE) AS OD, max(CANCEL_DATE) AS CD FROM stats GROUP BY CLIENT

返回:

ID    OD           CD
 5    1213567200                  // fine
 6    1210629600   1281736799     // fine
 7    1201042800   1248386399     // Should be empty
 8    1205449200   1271282399     // fine

如果客户端有一个(或多个)空列,我无法弄清楚如何返回空/0/NULL。还尝试使用 NULL 字段。

感谢任何提示。

【问题讨论】:

    标签: mysql null max min


    【解决方案1】:

    我不知道它会多快,但我想可以这样解决:

    SELECT ID, min(ORDER_DATE) AS OD,
    IF(COUNT(*)=COUNT(CANCEL_DATE),max(CANCEL_DATE),NULL) AS CD 
    FROM stats GROUP BY CLIENT
    

    我无法对其进行测试,但此解决方案背后的想法是 count(cancel_date) 应该计算所有非空值条目,如果它等于 count(*),则意味着没有空值,它将返回 max(cancel_date) ,否则为空。

    【讨论】:

    • 我不知道它是否会比我的更快,我认为它们可能是等效的,但这是个好主意:) +1
    • 工作,也是。非常感谢。摆弄了几个小时,但没有得到那么简单的解决方案。速度为:0.06 秒,约 6k 行。所以比 fthiella 的解决方案快一点
    【解决方案2】:

    您可以使用这样的查询:

    SELECT
      client,
      min(ORDER_DATE) AS OD,
      case when MAX(CANCEL_DATE IS NULL)=0 THEN max(CANCEL_DATE) END AS CD
    FROM
      stats
    GROUP BY
      CLIENT
    

    请看小提琴here

    • CANCEL_DATE IS NULL 将在 CANCEL_DATE 不为空时计算为 0,或在为空时计算为 1
    • 如果没有带有 null 值的 cancel_date,MAX(CANCEL_DATE IS NULL) 将被评估为 0,否则其值为 1。
    • MAX(CANCEL_DATE IS NULL)=0时表示没有CANCEL_DATE为null的行,此时需要返回MAX(cancel_date),否则需要返回NULL。

    【讨论】:

    • 为了速度:6k 行需要 0.07 秒
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    相关资源
    最近更新 更多