Получить полную стоимость звонка клиента - PullRequest
1 голос
/ 26 июня 2019

У меня есть 2 таблицы = клиент и его история звонков

Теперь я хочу взимать с них плату в зависимости от продолжительности звонка, и это также для определенного месяца, например, января 2015 года.

Вот критерии для расчета стоимости звонков -

A) Для входящих звонков плата составляет 1 единицу в секунду. Example if the duration is 250 seconds then cost is 250

B) Для исходящих вызовов for the first 2mins, the cost is fixed at 500 units. за последующие секунды стоимость составляет 2 units per second.

Пример, если исходящая длительность равна 5 минутам, тогда стоимость равна 500 units + 2*3*60 units = 860 units

Ниже приведены таблицы:

customer table with columns id, name, phone

history table with columns id, incoming_phone, outgoing_phone, duration, dialed_on (YYYY-MM-DD)

Я предложил следующие условия для моих условий:

Для стоимости входящего звонка:

select c.name, c.phone, h.duration as cost
from customer c join history h on c.phone = h.incoming_phone

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

Для стоимости исходящего звонка:

select c.name, c.phone, CASE
    WHEN h.duration > 120 THEN 500 + 2*(h.duration-120)
    ELSE 2*(h.duration-120)
END; as cost
from customer c join history h on c.phone = h.outgoing_phone

Когда я запускаю вышеуказанный запрос, я получаю syntax error like "ERROR 1109 (42S02) at line 1: Unknown table 'c' in field list"

Я хочу объединить эти два запроса, получить общую стоимость и отобразить поля как имя, телефон, стоимость

Мне все еще нужно добавить условие для определенного месяца, чтобы ограничить данные за январь 2015 года, но застрял с подходом.

1 Ответ

1 голос
/ 26 июня 2019

Ошибка связана с дополнительной точкой с запятой ; после END.

Похоже, ваш последний запрос будет таким:

SELECT c.name, 
       c.phone, 
       SUM(CASE WHEN h.direction = 'in' THEN h.duration END) as IncomingCost,
       SUM(CASE WHEN h.direction = 'out' AND h.duration > 120 THEN 500 + 2*(h.duration-120)
            ELSE 2*(h.duration-120)
       END) as OutgoingCost,
       SUM(CASE WHEN h.direction = 'in' THEN h.duration END +
       CASE WHEN h.direction = 'out' AND h.duration > 120 THEN 500 + 2*(h.duration-120)
            ELSE 2*(h.duration-120)
       END) as TotalCost
FROM customer c 
JOIN (SELECT 'out' as directon, duration, dialed_on, outgoing_phone as phone 
      FROM history 
      WHERE YEAR(dialed_on) = 1995
      AND MONTH(dialed_on) = 1
      UNION ALL
      SELECT 'in' as direction, duration, dialed_on, incoming_phone as phone
      FROM history
      WHERE YEAR(dialed_on) = 1995
      AND MONTH(dialed_on) = 1
     ) h ON c.phone = h.phone
GROUP BY c.name,
         c.phone
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...