Forwarded from Хабр
«Текстовые файлы постепенно обросли форматированием: появились HTML, XML, FB2, MD, DocBook и другие форматы. Но я использую всю эту разметку только по работе или же в исключительных случаях. Простые текстовые файлы безо всякого форматирования много лет остаются на вершине моего личного хит-парада способов хранения информации»
Прекрасный минимализм текстовых файлов
Прекрасный минимализм текстовых файлов
Forwarded from Data Science. SQL hub
Для транспонирования таблицы в SQL необходимо использовать оператор PIVOT или функцию MAX или CASE в сочетании с оператором GROUP BY.
Оператор PIVOT позволяет преобразовать строки в столбцы, а столбцы - в строки, используя значения одного столбца в качестве заголовков новых столбцов.
Синтаксис оператора PIVOT выглядит следующим образом:
SELECT *
FROM table_name
PIVOT
(
aggregate_function(column_to_aggregate)
FOR column_to_pivot IN (list_of_pivot_values)
) AS alias_name;Здесь table_name - это имя таблицы, которую нужно транспонировать aggregate_function - это агрегатная функция, которую нужно применить к столбцу, column_to_aggregate - это имя столбца, который нужно агрегировать, column_to_pivot - это имя столбца, который нужно использовать для создания новых столбцов, list_of_pivot_values - это список значений столбца column_to_pivot, для которых нужно создать новые столбцы, alias_name - это имя для результирующей таблицы
Пример использования оператора PIVOT:
SELECT *
FROM (
SELECT product_id, year, sales
FROM sales_table
) AS source_table
PIVOT
(
SUM(sales)
FOR year IN (2023, 2022, 2021)
) AS pivot_table;В этом примере мы выбираем данные из таблицы sales_table и используем оператор PIVOT, чтобы преобразовать строки в столбцы, используя годы продаж как заголовки новых столбцов.
Если оператор PIVOT недоступен в вашей версии SQL, вы можете использовать функцию MAX или CASE в сочетании с оператором GROUP BY.
Синтаксис функции MAX для транспонирования таблицы выглядит следующим образом:
SELECT column_to_group_by,
MAX(CASE column_to_pivot WHEN pivot_value_1 THEN value_to_show ELSE NULL END) AS pivot_value_1,
MAX(CASE column_to_pivot WHEN pivot_value_2 THEN value_to_show ELSE NULL END) AS pivot_value_2,
...FROM table_name
GROUP BY column_to_group_by;Здесь column_to_group_by - это имя столбца, по которому нужно группировать данные, column_to_pivot - это имя столбца, который нужно использовать для создания новых столбцов, pivot_value_1, pivot_value_2 - это значения столбца column_to_pivot, для которых нужно создать новые столбцы, value_to_show - это значение, которое нужно показать в новом столбце
Задача:
Дана таблица T:
id value
2 a
3 a
4 b
5 cНеобходимо сформировать запрос, который бы вернул следующий набор:
a b c
2 1 1Пишите свое решение в комментариях👇
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Data Science. SQL hub
В SQL даты обычно вводятся в формате "ГГГГ-ММ-ДД", где "ГГГГ" - год, "ММ" - месяц (от 01 до 12) и "ДД" - день (от 01 до 31).
Например, чтобы вставить запись в таблицу "orders" с датой заказа 22 марта 2023 года, можно использовать следующий запрос:
INSERT INTO orders (order_date, customer_name)
VALUES ('2023-03-22', 'Иванов Иван');
Если же дата вводится с помощью функции, то можно использовать стандартную функцию преобразования даты, например, функцию TO_DATE() в Oracle:INSERT INTO orders (order_date, customer_name)
VALUES (TO_DATE('22-03-2023', 'DD-MM-YYYY'), 'Иванов Иван');
В этом примере мы используем функцию TO_DATE() для преобразования строки "22-03-2023" в дату формата "ГГГГ-ММ-ДД". Второй аргумент функции ("DD-MM-YYYY") указывает формат входной строки.
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from SQL Pro
Возможно ли использование одновременно двух агрегирующих функций:
select min(price), max(price) from Orders;
select min(price), max(price) from Orders;
Anonymous Quiz
9%
Да, но данный запрос составлен неверно, надо так: select * from Orders where price IN (min, max)
73%
Да, в результате мы получим минимальную и максимальную стоимости
2%
Да, в результате мы получим стоимости, отсортированные от минимальной до максимальной
9%
Нет, две функции одновременно использовать нельзя
6%
Посмотреть ответ
Forwarded from ДЕВОПСИНА | DevOps | Linux
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from ДЕВОПСИНА | DevOps | Linux
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from Хабр Новости
Canonical опубликовала релиз дистрибутива Ubuntu 23.04 Lunar Lobster. Операционная система перешла на обновлённое окружение рабочего стола, а ядро обновили до выпуска 6.2. Также Steam в виде snap-пакета вышел в стабильную ветку.
#ОС #разработка
#ОС #разработка
Forwarded from loldev();
This media is not supported in your browser
VIEW IN TELEGRAM
Надо было сказать, что на компьютере
Forwarded from Data Science. SQL hub
В этой статье мы разработаем БД для практики. В этом проекте перед вами стоит задача создать реляционную базу данных для веб-сайта, предлагающего продажу подержанных автомобилей.
Общее описание этого проекта заключается в том, что любой желающий может предлагать свои товары (подержанные автомобили) в виде рекламы, а потенциальные покупатели могут осуществлять поиск по нескольким категориям.
▪ Читать дальше
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Droider
This media is not supported in your browser
VIEW IN TELEGRAM
🤖 Инженеры подружили ChatGPT и робота Spot от Boston Dynamics!
Умельцы интегрировали технологию “из текста в речь” от Google, чтобы пользователи могли задавать “пёсику” вопросы голосом, а Spot мог отвечать в режиме реального времени с помощью ChatGPT.
В ролике можно увидеть, как Spot отвечает на вопросы о своем уровне заряда батареи, деталях задания и многом другом. Также робопёс может давать ответы “да” или “нет”, кивая или качая головой. Или отойти от “хозяина”, если он попросит.
Очень логичное продолжение - соединить языковую модель и роботов. Комментарии про захват “кожаных мешков” через 3,2,1…
@droidergram
Умельцы интегрировали технологию “из текста в речь” от Google, чтобы пользователи могли задавать “пёсику” вопросы голосом, а Spot мог отвечать в режиме реального времени с помощью ChatGPT.
В ролике можно увидеть, как Spot отвечает на вопросы о своем уровне заряда батареи, деталях задания и многом другом. Также робопёс может давать ответы “да” или “нет”, кивая или качая головой. Или отойти от “хозяина”, если он попросит.
Очень логичное продолжение - соединить языковую модель и роботов. Комментарии про захват “кожаных мешков” через 3,2,1…
@droidergram
Forwarded from Senior SQL Developer
Сравнение результатов двух SQL запросов выборки: EXCEPT, INTERSECT и SELECT
Оператор EXCEPT используется для вычитания результатов одного запроса из другого запроса. Другими словами, он возвращает только те строки, которые присутствуют в первом запросе, но отсутствуют во втором запросе.
Оператор INTERSECT используется для получения только тех строк, которые присутствуют в обоих запросах.
Оператор SELECT используется для выборки данных из таблицы.
Оператор EXCEPT вычитает результаты одного запроса из другого, а оператор INTERSECT находит только те строки, что присутствуют в обоих запросах. SELECT используется для выборки данных из таблицы. При использовании SQLite для работы с базами данных важно учитывать особенности каждого из этих операторов.
Оператор EXCEPT используется для вычитания результатов одного запроса из другого запроса. Другими словами, он возвращает только те строки, которые присутствуют в первом запросе, но отсутствуют во втором запросе.
Оператор INTERSECT используется для получения только тех строк, которые присутствуют в обоих запросах.
Оператор SELECT используется для выборки данных из таблицы.
Оператор EXCEPT вычитает результаты одного запроса из другого, а оператор INTERSECT находит только те строки, что присутствуют в обоих запросах. SELECT используется для выборки данных из таблицы. При использовании SQLite для работы с базами данных важно учитывать особенности каждого из этих операторов.
Forwarded from Postgres Guru | Базы данных 💐
⚙️ Сохраняем историю запросов psql в файл.
Такое может пригодиться для дальнейшего анализа запросов, расследования инцидентов, связанных с безопасностью базы данных, или просто чтобы разобраться кто накосячил и снёс пол базы 😅 А может у вас родился какой-то гениальный запрос, который вы не можете больше повторить, а тут он в файле сохранится 😉
Для установки файла для записи воспользуемся следующей командой psql:
HISTFILE - это переменная, которая определяет файл для истории запросов.
Если эта переменная не определена, то значение берется из переменной окружения PSQL_HISTORY. Если и эта переменная не определена, то значением по умолчанию будет ~/.psql_history - для Linux систем и APPDATA%\postgresql\psql_history - для Windows.
В нашем примере psql будет вести отдельный файл с историей команд для каждой базы данных в кластере. Мы можем вместо DBNAME указать конкретное имя базы, и тогда история будет вестись только для нее.
Также мы можем поместить данную команду в файл .psqlrc и тогда нам не придется прописывать эту команду каждый раз при запуске psql.
#psql
Такое может пригодиться для дальнейшего анализа запросов, расследования инцидентов, связанных с безопасностью базы данных, или просто чтобы разобраться кто накосячил и снёс пол базы 😅 А может у вас родился какой-то гениальный запрос, который вы не можете больше повторить, а тут он в файле сохранится 😉
Для установки файла для записи воспользуемся следующей командой psql:
\set HISTFILE ~/.psql_history- :DBNAMEHISTFILE - это переменная, которая определяет файл для истории запросов.
Если эта переменная не определена, то значение берется из переменной окружения PSQL_HISTORY. Если и эта переменная не определена, то значением по умолчанию будет ~/.psql_history - для Linux систем и APPDATA%\postgresql\psql_history - для Windows.
В нашем примере psql будет вести отдельный файл с историей команд для каждой базы данных в кластере. Мы можем вместо DBNAME указать конкретное имя базы, и тогда история будет вестись только для нее.
Также мы можем поместить данную команду в файл .psqlrc и тогда нам не придется прописывать эту команду каждый раз при запуске psql.
#psql
Forwarded from Senior SQL Developer
Создание поля, объединяющего имя и зарплату в выборке из таблицы пользователей
Для создания поля, которое будет включать в себя и имена, и зарплату, можно использовать функцию CONCAT(). Она объединяет две или более строковые величины в одну строку.
Пример SQL-запроса для создания поля new_field на фото.
В примере мы выбираем таблицу users и создаем новое поле с помощью функции CONCAT(). Внутри функции указываем два поля, которые хотим объединить - name и salary. Также задаем новое имя для созданного поля - new_field, используя AS.
Теперь в результате выполнения запроса в выборке будет присутствовать новое поле new_field, которое будет содержать имя пользователя и его зарплату.
Для создания поля, которое будет включать в себя и имена, и зарплату, можно использовать функцию CONCAT(). Она объединяет две или более строковые величины в одну строку.
Пример SQL-запроса для создания поля new_field на фото.
В примере мы выбираем таблицу users и создаем новое поле с помощью функции CONCAT(). Внутри функции указываем два поля, которые хотим объединить - name и salary. Также задаем новое имя для созданного поля - new_field, используя AS.
Теперь в результате выполнения запроса в выборке будет присутствовать новое поле new_field, которое будет содержать имя пользователя и его зарплату.
Forwarded from Senior SQL Developer
#вопросы_с_собеседований
Что такое нормализация и денормализация?
Нормализация отношений в SQL призвана организовать информацию в базе данных таким образом, чтобы она не занимала много места и с ней было удобно работать. Это удаление избыточных данных, устранение дублей, идентификация наборов связанных данных через PRIMARY KEY, etc.
Соответственно, денормализация является обратным процессом, который вносит в нормализованную таблицу избыточные данные.
Что такое нормализация и денормализация?
Нормализация отношений в SQL призвана организовать информацию в базе данных таким образом, чтобы она не занимала много места и с ней было удобно работать. Это удаление избыточных данных, устранение дублей, идентификация наборов связанных данных через PRIMARY KEY, etc.
Соответственно, денормализация является обратным процессом, который вносит в нормализованную таблицу избыточные данные.
Forwarded from Postgres Guru | Базы данных 💐
👨🏻🎓 Управление параметрами транзакции в PostgreSQL.
Мы уже с вами знаем как открывать транзакцию, фиксировать ее и откатывать изменения, а также как ставить точки сохранения внутри транзакции.
Теперь давайте разберемся какими параметрами транзакции мы можем управлять. Одни из таких параметров - это READ WRITE и READ ONLY.
READ WRITE - это транзакция для записи и чтения данных.
READ ONLY - транзакция только для чтения.
Пример:
#queries
Мы уже с вами знаем как открывать транзакцию, фиксировать ее и откатывать изменения, а также как ставить точки сохранения внутри транзакции.
Теперь давайте разберемся какими параметрами транзакции мы можем управлять. Одни из таких параметров - это READ WRITE и READ ONLY.
READ WRITE - это транзакция для записи и чтения данных.
READ ONLY - транзакция только для чтения.
Пример:
BEGIN READ ONLY; - открываем транзакцию только для чтенияCREATE TABLE test (id int); - пытаемся создать таблицу testERROR: cannot execute CREATE TABLE in a read-only transaction - получаем ошибку#queries
Forwarded from Senior SQL Developer
Можно попробовать использовать функцию COUNT() в сочетании с оператором GROUP BY.
Предположим, у нас есть таблица "orders" с колонками "customer_name" и "order_date", и мы хотим посчитать, сколько заказов было сделано каждым клиентом. Мы можем написать следующий SQL-запрос:
SELECT customer_name, COUNT(*) as order_count
FROM orders
GROUP BY customer_name
Этот запрос выберет все уникальные значения из колонки "customer_name" в таблице "orders" и подсчитает количество строк, связанных с каждым уникальным значением. Результатом запроса будет таблица со столбцами "customer_name" и "order_count", в которой каждая строка будет показывать клиента и количество его заказов.Please open Telegram to view this post
VIEW IN TELEGRAM