как использовать вложенные функции для разных таблиц в postgresql? - PullRequest
1 голос
/ 29 сентября 2019
    **table name:order_details                               table name:customer_details**

    email         | order_id                         email         | customer_reg_date
    ------------   ----------                       -----------      -----------------
    mo@gmail.com   201                              mo@gmail.com       2019-05-24
    mo@gmail.com   202                              fa@gmail.com       2019-07-15
    fa@gmail.com   203                              fr@gmail.com       2019-03-29
    fr@gmail.com   204
    fa@gmail.com   205

    **Result**
    email   ||   average_weeks_per_order
    ------       -----------------------
    mo@gmail.com     9

    1.count the number of order for each email
    2.number of days between customer_reg_date and the current day then subtract with 7.
    3.subtract s-2 with number of orders in s-1
    Example:-
    mo@gmail.com
    number of orders-2
    (current_date - '2019-05-24')/7=18
    18/2=9
    ans:9
    I mean,
    (current_day-customer_reg_date/7)/number of order-This shoud be calculated for each customer.

    I tried the following code but results are not efficient and getting more emails

    QUERY:select distinct a.email,
       (((current_date -b.created_on)/7)/(count(distinct(a.order_id))))as average_weeks_perorder
       FROM ord_details a,cus_details b
       where a.email not in(select email from cus_details where customer_groups='internal')
       GROUP by a.email,b.created_on;

    SCREENSHOT:

    [enter image description here][1]
    6360742660@aapnik.com   0
    6360742660@aapnik.com   1
    8549968117aapnik@gmail.com  2
    8549968117aapnik@gmail.com  3
    8549968117aapnik@gmail.com  4
    8549968117aapnik@gmail.com  5
    8549968117aapnik@gmail.com  6
    8549968117aapnik@gmail.com  7
    8549968117aapnik@gmail.com  8
    8549968117aapnik@gmail.com  9
    8549968117aapnik@gmail.com  10
    8549968117aapnik@gmail.com  11
    8549968117aapnik@gmail.com  12
    8549968117aapnik@gmail.com  13
    8549968117aapnik@gmail.com  14
    8549968117aapnik@gmail.com  15
    8549968117aapnik@gmail.com  16
    8549968117aapnik@gmail.com  17
    8549968117aapnik@gmail.com  18
    8549968117aapnik@gmail.com  19
    8549968117aapnik@gmail.com  20
    8549968117aapnik@gmail.com  21
    8549968117aapnik@gmail.com  22
    8549968117aapnik@gmail.com  23
    8549968117aapnik@gmail.com  24
    8549968117aapnik@gmail.com  25
    8549968117aapnik@gmail.com  26
    8549968117aapnik@gmail.com  27
    8549968117aapnik@gmail.com  28
    8549968117aapnik@gmail.com  32
    9035429951@aapnik.com   0
    9035429951@aapnik.com   1
    9035429951@aapnik.com   2
    9035429951@aapnik.com   3
    9035429951@aapnik.com   4
    9035429951@aapnik.com   5
    9035429951@aapnik.com   6
    9113075499aapnik@gmail.com  2
    9113075499aapnik@gmail.com  3
    9113075499aapnik@gmail.com  4
    9113075499aapnik@gmail.com  5
    9113075499aapnik@gmail.com  6
    9113075499aapnik@gmail.com  7
    9113075499aapnik@gmail.com  8
    9113075499aapnik@gmail.com  9
    9113075499aapnik@gmail.com  10
    9113075499aapnik@gmail.com  11
    9113075499aapnik@gmail.com  12
    9113075499aapnik@gmail.com  13
    9113075499aapnik@gmail.com  14
    9113075499aapnik@gmail.com  15
    9113075499aapnik@gmail.com  16
    9113075499aapnik@gmail.com  17
    9113075499aapnik@gmail.com  18
    9113075499aapnik@gmail.com  19
    9113075499aapnik@gmail.com  20
    9113075499aapnik@gmail.com  21
    9113075499aapnik@gmail.com  22
    9113075499aapnik@gmail.com  23
    9113075499aapnik@gmail.com  24
    9113075499aapnik@gmail.com  25
    9113075499aapnik@gmail.com  26
    9113075499aapnik@gmail.com  27
    9113075499aapnik@gmail.com  28
    9113075499aapnik@gmail.com  32
    9141876636@aapnik.com   0
    9141876636@aapnik.com   1
    9141876636@aapnik.com   2
    9141876636@aapnik.com   3
    9141876636@aapnik.com   4
    9141876636@aapnik.com   5
    9141876636@aapnik.com   6
    9243821831aapnik@gmail.com  2
    9243821831aapnik@gmail.com  3
    9243821831aapnik@gmail.com  4
    9243821831aapnik@gmail.com  5
    9243821831aapnik@gmail.com  6
    9243821831aapnik@gmail.com  7
    9243821831aapnik@gmail.com  8
    9243821831aapnik@gmail.com  9
    9243821831aapnik@gmail.com  10
    9243821831aapnik@gmail.com  11
    9243821831aapnik@gmail.com  12
    9243821831aapnik@gmail.com  13
    9243821831aapnik@gmail.com  14
    9243821831aapnik@gmail.com  15
    9243821831aapnik@gmail.com  16
    9243821831aapnik@gmail.com  17
    9243821831aapnik@gmail.com  18
    9243821831aapnik@gmail.com  19
    9243821831aapnik@gmail.com  20
    9243821831aapnik@gmail.com  21
    9243821831aapnik@gmail.com  22
    9243821831aapnik@gmail.com  23
    9243821831aapnik@gmail.com  24
    9243821831aapnik@gmail.com  25
    9243821831aapnik@gmail.com  26
    9243821831aapnik@gmail.com  27
    9243821831aapnik@gmail.com  28
    9243821831aapnik@gmail.com  32
    9535393725@aapnik.com   0
    9535393725@aapnik.com   1
    9535393725@aapnik.com   2
    9535393725@aapnik.com   3
    9535393725@aapnik.com   4
    96114169sudha@gmail.com 2
    96114169sudha@gmail.com 3
    96114169sudha@gmail.com 4
    96114169sudha@gmail.com 5
    96114169sudha@gmail.com 6
    96114169sudha@gmail.com 7
    96114169sudha@gmail.com 8
    96114169sudha@gmail.com 9
    96114169sudha@gmail.com 10
    96114169sudha@gmail.com 11
    96114169sudha@gmail.com 12
    96114169sudha@gmail.com 13
    96114169sudha@gmail.com 14
    96114169sudha@gmail.com 15
    96114169sudha@gmail.com 16
    96114169sudha@gmail.com 17
    96114169sudha@gmail.com 18
    96114169sudha@gmail.com 19
    96114169sudha@gmail.com 20
    96114169sudha@gmail.com 21
    96114169sudha@gmail.com 22
    96114169sudha@gmail.com 23
    96114169sudha@gmail.com 24
    96114169sudha@gmail.com 25
    96114169sudha@gmail.com 26
    96114169sudha@gmail.com 27
    96114169sudha@gmail.com 28
    96114169sudha@gmail.com 32
    9611491489@aapnik.com   2
    9611491489@aapnik.com   3
    9611491489@aapnik.com   4
    9611491489@aapnik.com   5
    9611491489@aapnik.com   6
    9611491489@aapnik.com   7
    9611491489@aapnik.com   8
    9611491489@aapnik.com   9
    9611491489@aapnik.com   10
    9611491489@aapnik.com   11
    9611491489@aapnik.com   12
    9611491489@aapnik.com   13
    9611491489@aapnik.com   14
    9611491489@aapnik.com   15
    9611491489@aapnik.com   16
    9611491489@aapnik.com   17
    9611491489@aapnik.com   18
    9611491489@aapnik.com   19
    9611491489@aapnik.com   20
    9611491489@aapnik.com   21
    9611491489@aapnik.com   22
    9611491489@aapnik.com   23
    9611491489@aapnik.com   24
    9611491489@aapnik.com   25
    9611491489@aapnik.com   26
    9611491489@aapnik.com   27
    9611491489@aapnik.com   28
    9611491489@aapnik.com   32
    9686828149@aapnik.com   2
    9686828149@aapnik.com   3
    9686828149@aapnik.com   4
    9686828149@aapnik.com   5
    9686828149@aapnik.com   6
    9686828149@aapnik.com   7
    9686828149@aapnik.com   8
    9686828149@aapnik.com   9
    9686828149@aapnik.com   10
    9686828149@aapnik.com   11
    9686828149@aapnik.com   12
    9686828149@aapnik.com   13
    9686828149@aapnik.com   14
    9686828149@aapnik.com   15
    9686828149@aapnik.com   16
    9686828149@aapnik.com   17
    9686828149@aapnik.com   18
    9686828149@aapnik.com   19
    9686828149@aapnik.com   20
    9686828149@aapnik.com   21
    9686828149@aapnik.com   22
    9686828149@aapnik.com   23
    9686828149@aapnik.com   24
    9686828149@aapnik.com   25
    9686828149@aapnik.com   26
    9686828149@aapnik.com   27
    9686828149@aapnik.com   28
    9686828149@aapnik.com   32
    9740288293@aapnik.com   0
    9740288293@aapnik.com   1
    9740288293@aapnik.com   2
    9740288293@aapnik.com   3
    9844286656aapnik@gmail.com  0
    9844286656aapnik@gmail.com  1
    9844286656aapnik@gmail.com  2
    9844286656aapnik@gmail.com  3
    9844286656aapnik@gmail.com  4
    9844286656aapnik@gmail.com  5
    9844286656aapnik@gmail.com  6

enter image description here

1 Ответ

1 голос
/ 29 сентября 2019

Если я правильно следил за вами, вы можете использовать агрегированный запрос для подсчета количества заказов на клиента и применять арифметику по мере необходимости:

SELECT c.email, (current_date - c.customer_reg_date) / 7 / COUNT(*) res
FROM customer_details c
INNER JOIN order_details o ON c.email = o.email
GROUP BY c.email, c.customer_reg_date

Демонстрация на DB Fiddle:

| email        | res |
| ------------ | --- |
| fa@gmail.com | 5   |
| fr@gmail.com | 26  |
| mo@gmail.com | 9   |

Пример данных :

CREATE TABLE order_details(
   email    VARCHAR(12) NOT NULL 
  ,order_id INTEGER  NOT NULL
);
INSERT INTO order_details(email,order_id) VALUES ('mo@gmail.com',201);
INSERT INTO order_details(email,order_id) VALUES ('mo@gmail.com',202);
INSERT INTO order_details(email,order_id) VALUES ('fa@gmail.com',203);
INSERT INTO order_details(email,order_id) VALUES ('fr@gmail.com',204);
INSERT INTO order_details(email,order_id) VALUES ('fa@gmail.com',205);

CREATE TABLE customer_details(
   email             VARCHAR(12) NOT NULL PRIMARY KEY
  ,customer_reg_date DATE  NOT NULL
);
INSERT INTO customer_details(email,customer_reg_date) VALUES ('mo@gmail.com','2019-05-24');
INSERT INTO customer_details(email,customer_reg_date) VALUES ('fa@gmail.com','2019-07-15');
INSERT INTO customer_details(email,customer_reg_date) VALUES ('fr@gmail.com','2019-03-29');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...