Как округлить значение в хранимой процедуре MySQL - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть эта хранимая процедура:

CREATE DEFINER=`brambang`@`%` PROCEDURE `TNP_PRODUK_FrekuensiPembelianUlang`(IN paramdatefrom CHAR(19), paramdateto CHAR(19))
BEGIN
SELECT MAX(count) AS max,
       MIN(count) AS min,
       AVG(count) AS average,
       AVG(CASE WHEN rn IN (FLOOR((@tr+1)/2), FLOOR((@tr+2)/2)) THEN count END) AS median
FROM (
  SELECT count, 
         @rn := @rn + 1 AS rn,
         @tr := @rn AS tr
  FROM (
    SELECT COUNT(*) AS count
    FROM order_match om1
    where om1.createdAt between paramdatefrom and paramdateto
    and om1.order_status_id in (4, 5, 6, 8)
    and EXISTS(SELECT 1 from order_match om2
    where om1.createdby = om2.createdby
    and om2.createdAt < paramdatefrom
    and om2.order_status_id in (4, 5, 6, 8))
    GROUP BY createdby
    ORDER BY count
  ) o
  CROSS JOIN (SELECT @rn := 0) init
) c;

END

, и это результат, если я вставлю параметр

+-----+-----+---------+---------+
| max | min | average | median  |
+-----+-----+---------+---------+
|  24 |   1 |  1.6382 | 1.00000 |
+-----+-----+---------+---------+

Что мне добавить в мою хранимую процедуру, чтобы значение могло быть округленным, чтобы быть таким

    +-----+-----+---------+---------+
    | max | min | average | median  |
    +-----+-----+---------+---------+
    |  24 |   1 |  1.64   |     1.0 |
    +-----+-----+---------+---------+

1 Ответ

1 голос
/ 24 февраля 2020

Просто используйте ROUND(). Если вы хотите максимум два десятичных знака, то:

SELECT ROUND(MAX(count), 2) AS max,
       ROUND(MIN(count), 2) AS min,
       ROUND(AVG(count), 2) AS average,
       ROUND(AVG(CASE WHEN rn IN (FLOOR((@tr+1)/2), FLOOR((@tr+2)/2)) THEN count END), 2) AS median
FROM ...
...