Хотите присоединиться к четвертой таблице в запросе - PullRequest
0 голосов
/ 30 октября 2018

У меня есть четыре таблицы:

  1. mls_category
  2. points_matrix
  3. mls_entry
  4. bonus_points

Моя первая таблица (mls_category) выглядит следующим образом:

*--------------------------------*
| cat_no |  store_id | cat_value |
*--------------------------------*
|   10   |    101    |     1     |
|   11   |    101    |     4     |
*--------------------------------*

Моя вторая таблица (points_matrix) выглядит так:

*----------------------------------------------------*
| pm_no |  store_id | value_per_point | maxpoint     |
*----------------------------------------------------*
|   1   |    101    |       1         |      10      |
|   2   |    101    |       2         |      50      |
|   3   |    101    |       3         |      80      |
*----------------------------------------------------*

Моя третья таблица (mls_entry) выглядит следующим образом:

*-------------------------------------------*
| user_id |  category | distance |  status  |
*-------------------------------------------*
|    1    |     10    |    20    | approved |
|    1    |     10    |    30    | approved |
|    1    |     11    |    40    | approved |
*-------------------------------------------*

Моя четвертая таблица (bonus_points) выглядит так:

*--------------------------------------------*
| user_id |  store_id | bonus_points | type  |
*--------------------------------------------*
|    1    |    101    |      200     | fixed |
|    2    |    102    |      300     | fixed |
|    1    |    103    |       4      |  per  |
*--------------------------------------------*

Теперь я хочу добавить бонусные баллы к сумме общего расстояния в соответствии с store_id, user_id и типом.

Я использую следующий код для получения общего расстояния:

SELECT MIN(b.value_per_point) * d.total_distance FROM points_matrix b 
JOIN 
(
    SELECT store_id, sum(t1.totald/c.cat_value) as total_distance FROM mls_category c 
    JOIN 
    (
        SELECT SUM(distance) totald, user_id, category FROM mls_entry 
        WHERE user_id= 1 AND status = 'approved' GROUP BY user_id, category
    ) t1 ON c.cat_no = t1.category
) d ON b.store_id = d.store_id AND b.maxpoint >= d.total_distance

Приведенный выше код является правильным для вычисления значения, теперь я хочу присоединиться к моей четвертой таблице.

Это дает мне сумму (60 * 3 = 180) в качестве общего значения. Теперь я хочу (60 + 200) * 3 = 780 для пользователя 1 и сохранить идентификатор 101 и значение является фиксированным.

1 Ответ

0 голосов
/ 30 октября 2018

я думаю, что ваш запрос будет как ниже

SELECT Max(b.value_per_point)*( max(d.total_distance)+max(bonus_points)) FROM mls_point_matrix b
JOIN
(
   SELECT store_id, sum(t1.totald/c.cat_value) as total_distance FROM mls_category c
   JOIN
   (
       SELECT SUM(distance) totald, user_id, category FROM mls_entry
       WHERE user_id= 1 AND status = 'approved' GROUP BY user_id, category
   ) t1 ON c.cat_no = t1.category group by store_id
) d ON b.store_id = d.store_id inner join bonus_points bp on bp.store_id=d.store_id

ДЕМО скрипка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...