2015-07-07 3 views
-1

Может кто поможет мне понять эту строку в SQL.Синтаксис SQL Query

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'. 
+4

Неполная линия – Strawberry

+1

PLZ спросить ур вопрос ясно ... – kasim

+0

спросите о конкретных вещах, которые вы не понимаете. если вы ничего не понимаете, вы должны сначала следовать некоторым учебным курсам SQL. – hoijui

ответ

1

Во-первых, посмотрите на COALESCE(a,b) означает, что если не равно нулю, то возвращает возвратный еще б.

Вторая часть - COUNT DISTINCT, которая будет считать все значения разными (отличными).

А затем CASE WHEN, который выдаст что-то другое в соответствии с некоторыми условиями.

Так вот случай, когда говорит, что, когда ORDER_DATE в о менее чем 30 после того, как вас first_order_date (datediff(o.order_date,o.first_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) (o.status_id in (11,22,24)), тогда вы ставите значение o.customer_id (THEN o.customer_id END, I угадайте, иначе это будет null).

Итак, теперь вы делаете ОТКЛОНЕНИЕ СЧЕТЧИКА на этом, чтобы подсчитать все разные идентификаторы, так что в основном вы считаете все order_id, что veri все условия выше.

Наконец, вы делаете COALESCE в COUNT, поэтому, если не было строк, соответствующих вашему условию, оно вернет 0. Edit: Здесь я имею в виду, если бы не было строк, соответствующих вашему случаю, тогда вы бы сделали свой COUNT DISTINCT ничем (NULL), поэтому, чтобы избежать проблем, он поставил COALESCE для возврата 0, если никакие строки не соответствуют вашим условиям CASE WHEN.

Не уверен, что я был чист.