У меня есть таблица с именем order_match, которая содержит order_buyer_Id в качестве идентификатора транзакции, созданный в качестве идентификатора покупателя, и созданный в качестве даты совершения транзакции, а количество - в качестве количества каждого заказа.
В этом случае я хочу посчитать заказ (order_buyer_Id) для каждого покупателя (созданный) и выяснить максимальное и минимальное количество после этого.
это пример данных:
+----------------+-----------+------------+--------+
| order_buyer_id | createdby | createdAt |quantity|
+----------------+-----------+------------+--------+
| 19123 | 19 | 2017-02-02 |0.4 |
| 193241 | 19 | 2017-02-02 |0.5
| 123123 | 20 | 2017-02-02 |1 |
| 32242 | 20 | 2017-02-02 |4
| 32434 | 20 | 2017-02-02 |3 |
+----------------+-----------+------------+---------
и, если я выполню запрос, ожидаемый результат будет:
+-----+-----+---------+--------+
| max | min | average | median |
+-----+-----+---------+--------+
| 4 | 0.4 | 1,78 | 1 |
+-----+-----+---------+---------
Это скрипка
http://www.sqlfiddle.com/#! 9 / d89772 / 15
и это мой запрос
SELECT MAX(quantity) AS max,
MIN(quantity) AS min,
AVG(quantity) AS average,
AVG(CASE WHEN rn IN (FLOOR((@tr+1)/2), FLOOR((@tr+2)/2)) THEN quantity END) AS median
FROM (
SELECT count,
@rn := @rn + 1 AS rn,
@tr := @rn AS tr
FROM (
SELECT COUNT(*) AS count
FROM order_match
GROUP BY order_buyer_Id
order by quantity
) o
CROSS JOIN (SELECT @rn := 0) init
) c