Может ли кто-нибудь мне подсказать, как найти медианное значение для «налога» в период с 12.04.18 по 16.04.18:
user_id login_time tax
3 2018-04-15 16625000
5 2018-04-16
6 2018-04-17 296470000
6 2018-04-16 192519750
6 2018-04-15 4455500
6 2018-04-13 17125
6 2018-04-12 120180000
7 2018-04-18 24060000
7 2018-04-17 42959500
Результат равен 16625000 (потому что есть значение NULL. Нам нужно использовать его как 0).
Спасибо за внимание к моему вопросу!
@SMA: медиана - это не то же самое, что среднее (также называемое средним). AVG дает среднее, а не медианное значение.
Медиана - это значение
Итак, рассмотрев эти два случая, первое, что вам нужно, это количество строк данных. Затем вам нужно решить (простой случай), выбрать ли вы значение посередине или вам нужно среднее из двух значений (не забудьте применить сортировку до выбора фактических значений):
Для этого я бы использовал небольшой «код»:
Псевдокод:
1.) SELECT count(id) AS val FROM myTable WHERE datetime ... //$val=9
2.) Programming language: $lim = floor($val/2); // $lim=4
if odd($val){
3.) SELECT tax FROM myTable WHERE datetime [...] ORDER BY tax LIMIT $lim,1
}
else if even($val){
3.) Programming language: $lim -=1; // if $val was 10, we want row 4 and 5
4.) SELECT AVG(tax) AS tax FROM
(SELECT * FROM myTable WHERE datetime [...] ORDER BY tax LIMIT $lim,2) AS tmp
}
[...]
echo "Median is: ". $row["tax"];
спасибо, можно ли решить эту задачу без использования $?
@ ЕлисейГорьков уверен, что это всего лишь пример объявления переменной. Вы должны использовать объявление, поддерживаемое вашим языком программирования.
Я использую вашу подсказку, но у меня трудности. Это мой запрос: 1) SELECT count (user_id) from activity where login_time between '2018-04-12' and '2018-04-16'; 2) ВЫБЕРИТЕ налог из активности, где время входа в систему находится между «2018-04-12» и «2018-04-16» в порядке налогообложения; 3) ВЫБРАТЬ СРЕДНЕЕ (налог) в качестве налога из (выберите * из активности, где время_входа находится между '2018-04-12' и '2018-04-16', в порядке налогообложения) d; Что здесь не так?
@ ЕлисейГорьков: трудно сказать, можете ли вы обновить свой первоначальный пост результатами, которые вы получаете от каждого запроса? Тогда мы сможем понять, что идет не так. Здесь важна часть LIMIT
, так как она определяет, какие значения извлекать из базы данных!
SELECT AVG(NVL(tax, 0)) from ...
?