SQL查询语法

时间:2015-07-07 06:48:15

标签: mysql sql sql-server

任何人都可以帮助我理解SQL中的这一行。

COALESCE
(

    COUNT
    (
        DISTINCT (
                CASE WHEN DATEDIFF(o.order_date,o.first_order_date) <= 30 AND DATEDIFF(o.order_date,o.first_order_date) > 0 AND DATE_FORMAT(o.first_order_date,'%Y-%m') < DATE_FORMAT(now()- INTERVAL 1 MONTH,'%Y-%m') AND o.status_id in (11,22,24)
                    THEN o.customer_id
                END
            )
    ),
    0   
) as '0-30 customer reorder'.

1 个答案:

答案 0 :(得分:1)

首先,查看COALESCE(a,b)表示如果a不为null,则返回else返回b。

第二部分是COUNT DISTINCT,它将计算所有不同(不同)的值。

然后根据某些条件输出不同的CASE WHEN

所以这里的情况是,当你在first_order_date(datediff(o.order_date,o.first_order_date) <= 30)之后o的order_date小于30时,order_date和first_order_date是不同的[严格说来是“如果order_date在first_order_date之后,但是我假设first_order_date必须在order_date之前(datediff(o.order_date,o.first_order_date) > 0)并且你的first_order_date(严格地)早于一个月(date_format(o.first_order_date,'%Y-%m') <date_format(now()- interval 1 month,'%Y-%m'))并且status_id在(11,22,24)({{1然后你把值放在o.customer_id(o.status_id in (11,22,24),我想否则它会为null)。

好的,所以现在你对它进行COUNT DISTINCT,这样你就可以计算所有不同的id,所以基本上你会计算所有验证上述所有条件的order_id。

最后,你在COUNT上做了一个COALESCE,所以如果没有符合你条件的行,它会返回0.编辑:这里我的意思是如果没有与你的情况相对应的行,那么你会做COUNT没有DISTINCT(NULL),所以为了避免问题,如果没有行与CASE WHEN条件相对应,他会将COALESCE返回0。

不确定我是否清楚。