Взято из: http://mdb-blog.blogspot.com/2015/06/mysql-find-median-nth-element-without.html
I предложил бы другой способ, не присоединившись, но работая со строками
, я не проверял его с таблицами с большими данными, но с небольшими / средними таблицами он отлично работает.
Хорошая вещь здесь он также работает GROUPING, поэтому он может возвращать медиану для нескольких элементов.
здесь - тестовый код для тестовой таблицы:
DROP TABLE test.test_median
CREATE TABLE test.test_median AS
SELECT 'book' AS grp, 4 AS val UNION ALL
SELECT 'book', 7 UNION ALL
SELECT 'book', 2 UNION ALL
SELECT 'book', 2 UNION ALL
SELECT 'book', 9 UNION ALL
SELECT 'book', 8 UNION ALL
SELECT 'book', 3 UNION ALL
SELECT 'note', 11 UNION ALL
SELECT 'bike', 22 UNION ALL
SELECT 'bike', 26
и код для поиска медианы для каждой группы:
SELECT grp,
SUBSTRING_INDEX( SUBSTRING_INDEX( GROUP_CONCAT(val ORDER BY val), ',', COUNT(*)/2 ), ',', -1) as the_median,
GROUP_CONCAT(val ORDER BY val) as all_vals_for_debug
FROM test.test_median
GROUP BY grp
Выход:
grp | the_median| all_vals_for_debug
bike| 22 | 22,26
book| 4 | 2,2,3,4,7,8,9
note| 11 | 11
Это действительно похоже на проблему с брандмауэром. Существует несколько способов реализации таких локальных реализаций в Azure, не открывая вашу сеть извне.
Начиная с самого простого подхода
Приложения логики благодаря поддержке локального шлюза данных , который позволяет ему получать доступ к данным из локальных систем . [одна тысяча сто сорок-дв]
Это имеет несколько компонентов
Пользовательский разъем Вам нужно создать пользовательский разъем , который можно подключить через -предоставляет шлюз данных и имеет одно определенное действие, которое может вызвать ваш компьютер Jenkins
Настройка локального шлюза данных
Вам потребуется [ 113] настройте локальный шлюз данных в вашей локальной сети так, чтобы он имел доступ к вашему ведущему устройству Jenkins (может также находиться на том же хосте, что и ведущее устройство Jenkins)
Создание приложения логики
Это простая часть, где вы используете приложение логики вместо Function Function. Вы можете создать простое HTTP-приложение, запускаемое по протоколу HTTP , которое использует пользовательский коннектор, который вы создали для запуска задания Jenkins
Azure Automation имеет аналогичную функцию, в которой вы можете развернуть Hybrid Worker в локальной сети и запланировать задания в этом рабочий. [один тысяча сто сорок семь]
Вы можете развернуть любого из следующих работников в соответствии с вашими требованиями
Runbook, который вы бы написали, мог быть в PowerShell или Python , и его целью было бы просто вызвать API Jenkins для запуска задания.
Со всем этим вам нужно было бы запустить runbook на гибридном рабочем .
Вы также можете запустить runbook из веб-крючка .
<час>Это скорее сетевое решение, в котором вы подключаете локальную сеть к Azure VNET, позволяя любым ресурсам в этой VNET получать доступ к вашей локальной сети. системы.
Есть несколько способов добиться этого, как описано в документации
Я не буду углубляться в то, как они настроены здесь. Вы можете обратиться к документации для получения подробных инструкций по настройке.
После настройки вы можете либо
Разоблачить Дженкинса
Для этого вы можете просто открыть порт в NSG вашего VNET, но это на самом деле не рекомендуется, так как вы могли бы просто вместо этого выставить его непосредственно в локальной сети.
Предпочтительным способом было бы настроить и использовать шлюз приложений Azure , который в основном является обратным прокси.
Разверните ваше приложение Function или Logic в VNET
Если вы не хотите выставлять конечную точку Jenkins извне, вы можете развернуть либо
В обоих этих сценариях вы могли напрямую вызывать конечную точку Jenkins, используя IP-адрес, на котором она размещена (сам локальный IP-адрес)
blockquote>