Я хочу рассчитать средний и средний для заданных координат в определенном радиусе.MySQL: Как вычислить медиану в определенном радиусе (долгота/широта)
важные характеристики являются: - широта - долгота - цена
SQL-команды, чтобы вычислить среднее значение:
SELECT avg(price) as average
FROM (SELECT r.*,
(6371 * acos(cos(radians(37.3541079)) * cos(radians(ANY_VALUE(`latitude`))) * cos(radians(ANY_VALUE(`longitude`)) - radians(-121.9552356)) + sin(radians(37.3541079)) * sin(radians(ANY_VALUE(`latitude`))))) AS distance
FROM `Rental` r
) r
WHERE distance <= 20;
Мой вопрос, как я могу вычислить медиану по цене в заданных координатах и радиусе. У MySQL нет медианы().
EDIT: Теперь я попробовал код из Simple way to calculate median with MySQL
SELECT AVG(middle_values) AS 'median' FROM (
SELECT t1.price AS 'middle_values' FROM
(
SELECT @row:[email protected]+1 as `row`, x.price
FROM rental AS x, (SELECT @row:=0) AS r
WHERE 1
-- put some where clause here
ORDER BY x.price
) AS t1,
(
SELECT COUNT(*) as 'count'
FROM rental x
WHERE 1
-- put same where clause here
) AS t2
-- the following condition will return 1 record for odd number sets, or 2 records for even number sets.
WHERE t1.row >= t2.count/2 and t1.row <= ((t2.count/2) +1)) AS t3;
Он работает для всех записей 200000, но когда я добавить WHERE distance <= 20
является MySQL - запрос перегружен.
SELECT AVG(middle_values) AS 'median' FROM (
SELECT t1.price AS 'middle_values' FROM
(
SELECT @row:[email protected]+1 as `row`, x.price
FROM rental AS x, (SELECT @row:=0) AS r, (SELECT a.*,
(6371 * acos(cos(radians(37.3541079)) * cos(radians(ANY_VALUE(`latitude`))) * cos(radians(ANY_VALUE(`longitude`)) - radians(-121.9552356)) + sin(radians(37.3541079)) * sin(radians(ANY_VALUE(`latitude`))))) AS distance
FROM `Rental` a
) a
WHERE distance <= 20
-- put some where clause here
ORDER BY x.price
) AS t1,
(
SELECT COUNT(*) as 'count'
FROM rental x, (SELECT a.*,
(6371 * acos(cos(radians(37.3541079)) * cos(radians(ANY_VALUE(`latitude`))) * cos(radians(ANY_VALUE(`longitude`)) - radians(-121.9552356)) + sin(radians(37.3541079)) * sin(radians(ANY_VALUE(`latitude`))))) AS distance
FROM `Rental` a
) a
WHERE distance <= 20
-- put same where clause here
) AS t2
-- the following condition will return 1 record for odd number sets, or 2 records for even number sets.
WHERE t1.row >= t2.count/2 and t1.row <= ((t2.count/2) +1)) AS t3;
Есть ли какие-то ошибки?
и вопрос есть? – e4c5
Как рассчитать медианную цену в заданных координатах и радиусе. У MySQL нет медианы(). – Severin
Возможный дубликат [Простой способ вычисления медианы с MySQL] (http://stackoverflow.com/questions/1291152/simple-way-to-calculate-median-with-mysql) – e4c5