У меня есть база данных, содержащая около 1 миллиарда строк, которые нам нужны, чтобы определить средний возраст в наборе. Сортировка миллиардов строк сложна, но если вы объединяете различные значения, которые можно найти (возраст варьируется от 0 до 100), вы можете отсортировать этот список и использовать некоторую арифметическую магию, чтобы найти какой-либо процентиль, который вы хотите, следующим образом:
with rawData(count_value) as
(
select p.YEAR_OF_BIRTH
from dbo.PERSON p
),
overallStats (avg_value, stdev_value, min_value, max_value, total) as
(
select avg(1.0 * count_value) as avg_value,
stdev(count_value) as stdev_value,
min(count_value) as min_value,
max(count_value) as max_value,
count(*) as total
from rawData
),
aggData (count_value, total, accumulated) as
(
select count_value,
count(*) as total,
SUM(count(*)) OVER (ORDER BY count_value ROWS UNBOUNDED PRECEDING) as accumulated
FROM rawData
group by count_value
)
select o.total as count_value,
o.min_value,
o.max_value,
o.avg_value,
o.stdev_value,
MIN(case when d.accumulated >= .50 * o.total then count_value else o.max_value end) as median_value,
MIN(case when d.accumulated >= .10 * o.total then count_value else o.max_value end) as p10_value,
MIN(case when d.accumulated >= .25 * o.total then count_value else o.max_value end) as p25_value,
MIN(case when d.accumulated >= .75 * o.total then count_value else o.max_value end) as p75_value,
MIN(case when d.accumulated >= .90 * o.total then count_value else o.max_value end) as p90_value
from aggData d
cross apply overallStats o
GROUP BY o.total, o.min_value, o.max_value, o.avg_value, o.stdev_value
;
Этот запрос зависит от ваших поддерживающих оконных функций (включая ROWS UNBOUNDED PRECEDING), но если у вас нет, то просто присоединить aggData CTE к себе и объединить все предыдущие итоговые значения в «накопленный» который используется для определения того, какое значение содержит указанный предусилитель. Вышеприведенный образец вычисляет p10, p25, p50 (медиана), p75 и p90.
-Chris
Да, при условии, что вы используете обычное соединение, ваше устройство Bluetooth 4.2 с двумя режимами должно подключаться к устройству BT2.1 + EDR. В настоящее время большинство телефонов Android поддерживают двойной режим Bluetooth 4.X (где X равен 0, 1 или 2), и они могут без проблем подключаться к устройствам BT 2.1 + EDR.