цены фильтра group_concat - PullRequest
       11

цены фильтра group_concat

0 голосов
/ 24 апреля 2018

Я ищу решение для следующего случая. Предположим, приведена следующая структура с данными:

CREATE TABLE IF NOT EXISTS `customer_prices` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `customer` int(11) unsigned NOT NULL,
  `price` decimal(8,2) unsigned DEFAULT NULL,
  `date` date NOT NULL DEFAULT '0000-00-00',
  PRIMARY KEY (`id`),
  UNIQUE KEY `item_id_period` (`customer`,`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;

INSERT INTO `customer_prices` (`id`, `customer`, `price`, `date`) VALUES
    (131739296, 1, 12.56, '2018-01-01'),
    (131739297, 1, 18.33, '2018-01-02'),
    (131739301, 1, 15.66, '2018-01-03'),
    (131739302, 1, 35.40, '2018-01-04'),
    (131739303, 1, 16.96, '2018-01-05'),
    (131739304, 1, 11.90, '2018-01-06'),
    (131739305, 1, 17.31, '2018-01-07'),
    (131739306, 1, 15.75, '2018-01-08');

Выполнение следующего запроса

SELECT 
AVG(price) + AVG(price) / 100 * 10 AS maxprice,
AVG(price) - AVG(price) / 100 * 10 AS minprice,
GROUP_CONCAT(price)
FROM customer_prices 
WHERE date > '2018-01-01' AND date < '2018-01-07'

выдаст список цен

18.33, 15.66, 35.40, 16.96, 11.90

То, что я хочу, - это ограничить эти прейскурантные цены всеми между minprice и maxprice.

Я пытался сделать так, но выдает ошибку.

SELECT 
GROUP_CONCAT(price)
FROM customer_prices 
WHERE date > '2018-01-01' AND date < '2018-01-07'
AND price > (AVG(price) - AVG(price) / 100 * 10)
AND price < (AVG(price) + AVG(price) / 100 * 10)

Есть ли какое-то решение для этого? Спасибо!

...