Как в sql посчитать количество повторяющихся значений
Можно попробовать использовать функцию COUNT() в сочетании с оператором GROUP BY.
Предположим, у нас есть таблица "orders" с колонками "customer_name" и "order_date", и мы хотим посчитать, сколько заказов было сделано каждым клиентом. Мы можем написать следующий SQL-запрос:
Этот запрос выберет все уникальные значения из колонки "customer_name" в таблице "orders" и подсчитает количество строк, связанных с каждым уникальным значением. Результатом запроса будет таблица со столбцами "customer_name" и "order_count", в которой каждая строка будет показывать клиента и количество его заказов.
Можно попробовать использовать функцию 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", в которой каждая строка будет показывать клиента и количество его заказов.
👍13
Как устроена виртуальная машина SQLite
SQL – концептуально странный язык. Вы пишете ваше приложение на одном языке, скажем, на JavaScript, а затем направляете базе данных команды, написанные на совершенно другом языке – SQL.
После этого база данных компилирует и оптимизирует эту команду на SQL, выполняет её и возвращает вам данные. Такой метод кажется ужасно неэффективным, но, всё-таки, ваше приложение может проделывать сотни таких операций в секунду. Просто безумие!
Смотреть статью
SQL – концептуально странный язык. Вы пишете ваше приложение на одном языке, скажем, на JavaScript, а затем направляете базе данных команды, написанные на совершенно другом языке – SQL.
После этого база данных компилирует и оптимизирует эту команду на SQL, выполняет её и возвращает вам данные. Такой метод кажется ужасно неэффективным, но, всё-таки, ваше приложение может проделывать сотни таких операций в секунду. Просто безумие!
Смотреть статью
👍3❤1😱1
SQL-запросы, которые вы рано или поздно погуглите
Отвечу на вопросы, которые возникают у новичков в SQL, в частности в PostgreSQL и BigQuery. Мы не будем обсуждать совсем базовые SELECT, CREATE или DROP.
Для удобства восприятия будем использовать тестовые данные. Первая таблица players содержит данные о пользователях и дате установки мобильной игры:
вторая, levels, — даты прохождения игроком с определенным ID того или иного уровня:
Я буду верстать в BigQuery на таком же датасете, так что использую соответствующий диалект.
INNER JOIN
Это тип объединения по умолчанию, и он оставит наименьшее число строк. Слово INNER можно опустить:
Посмотрим, что здесь происходит:
• В строках 1-6 мы выбираем только необходимые столбцы;
• 7-8: командой AS задаем псевдонимы таблицам;
• 8: определяем логику объединения по совпадающим playerId. Это означает также, что мы сохраним данные только об первом попавшемся уровне.
Получим всего четыре строки:
OUTER JOIN
Этот тип объединения, напротив, куда «добрее» и в случае FULL-объединения сохранит записи обо всех игроках и всех пройденных уровнях:
У нас появятся записи, где playerId пуст, поскольку попросили мы идентификаторы только из первой таблицы:
Читать
Отвечу на вопросы, которые возникают у новичков в SQL, в частности в PostgreSQL и BigQuery. Мы не будем обсуждать совсем базовые SELECT, CREATE или DROP.
Для удобства восприятия будем использовать тестовые данные. Первая таблица players содержит данные о пользователях и дате установки мобильной игры:
|playerId|name |installationDate|game |os |
|--------|----------------|----------------|----------|----------|
|9e8a0174|Трофимова Алёна |2023-07-30 |basketball|iOS 16 |
|3e2e04ad|Семенова Алиса |2022-07-21 |consumer |iOS 13 |
|642eafb2|Абрамова Диана |2022-06-06 |curtain |iOS 15 |
|8c231f49|Ефимова Ульяна |2022-06-21 |conductor |Android 12|
|a085caf1|Захаров Михаил |2023-04-11 |appear |Android 11|
|c4deb869|Николаева Марта |2022-03-31 |possible |iOS 11 |вторая, levels, — даты прохождения игроком с определенным ID того или иного уровня:
|playerId|level|completionDate|
|--------|-----|--------------|
|7b50274d|6 |2023-05-17 |
|b0c9a9da|20 |2022-02-19 |
|09b3d5b5|15 |2022-07-22 |
|52b3bfa9|11 |2022-02-18 |
|3e2e04ad|17 |2022-08-17 |
|642eafb2|17 |2022-04-14 |
|8c231f49|20 |2022-05-30 |
|a085caf1|20 |2023-02-24 |
|36545ec1|16 |2022-08-10 |
|44e9653f|3 |2023-06-02 |Я буду верстать в BigQuery на таком же датасете, так что использую соответствующий диалект.
INNER JOIN
Это тип объединения по умолчанию, и он оставит наименьшее число строк. Слово INNER можно опустить:
SELECT
p.playerId,
installationDate,
game,
level,
completionDate
FROM `project.tutorials.players` AS p
JOIN `project.tutorials.levels` AS l ON p.playerId = l.playerId;Посмотрим, что здесь происходит:
• В строках 1-6 мы выбираем только необходимые столбцы;
• 7-8: командой AS задаем псевдонимы таблицам;
• 8: определяем логику объединения по совпадающим playerId. Это означает также, что мы сохраним данные только об первом попавшемся уровне.
Получим всего четыре строки:
|playerId|name |installationDate|game |level|completionDate|
|--------|--------------|----------------|---------|-----|--------------|
|3e2e04ad|Семенова Алиса|2022-07-21 |consumer |17 |2022-08-17 |
|642eafb2|Абрамова Диана|2022-06-06 |curtain |17 |2022-04-14 |
|8c231f49|Ефимова Ульяна|2022-06-21 |conductor|20 |2022-05-30 |
|a085caf1|Захаров Михаил|2023-04-11 |appear |20 |2023-02-24 |
OUTER JOIN
Этот тип объединения, напротив, куда «добрее» и в случае FULL-объединения сохранит записи обо всех игроках и всех пройденных уровнях:
SELECT
p.playerId,
installationDate,
game,
level,
completionDate
FROM `project.tutorials.players` AS p
FULL OUTER JOIN `project.tutorials.levels` AS l ON p.playerId = l.playerId;У нас появятся записи, где playerId пуст, поскольку попросили мы идентификаторы только из первой таблицы:
Читать
👍6
С помощью какой конструкции можно проанализировать использование индекса?
Anonymous Quiz
32%
INDEX USAGE
14%
TEST INDEX
32%
EXPLAIN
7%
Все варианты неверные
16%
Посмотреть ответ
👍5
PostgreSQL + pgAdmin + mTLS + certificate-based authentication + docker-compose в одном флаконе
Читать статью
Читать статью
Хабр
PostgreSQL + pgAdmin + mTLS + certificate-based authentication + docker-compose в одном флаконе
Чего у меня не отнять, дак это мастерства заголовка... В какой-то момент при локальной разработке (да, в общем-то и при тестировании на иных стендах) задумываешься о том, как бы избавиться...
👍1
Чтобы заменить значение NULL на 0 в SQL, можно использовать функцию COALESCE. Эта функция принимает несколько аргументов и возвращает первый не NULL аргумент.
Если все аргументы NULL, функция вернет NULL. Вот пример использования COALESCE для замены значений NULL на 0:
SELECT COALESCE(column_name, 0) FROM table_name;
В этом запросе column_name - имя столбца, значения которого нужно заменить, а table_name - имя таблицы, в которой находится столбец. Функция COALESCE заменит все значения NULL в столбце на 0. Если значение столбца не NULL, то функция вернет его без изменений.Также можно использовать оператор IS NULL для проверки на NULL и замены его на 0. Вот пример:
SELECT CASE WHEN column_name IS NULL THEN 0 ELSE column_name END FROM table_name;
Этот запрос также заменит значения NULL на 0. Если значение столбца не NULL, то запрос вернет его без изменений.Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1
SELECT fname, lname, state FROM authors WHERE state NOT IN ('NY', 'NJ', 'CA')
Какой запрос из списка эквивалентен запросу из задачи?
Какой запрос из списка эквивалентен запросу из задачи?
Anonymous Quiz
59%
SELECT fname, lname, state FROM authors WHERE state <> 'NY' AND state <> 'NJ' AND state <> 'CA'
29%
SELECT fname, lname, state FROM authors WHERE state <> 'NY' OR state <> 'NJ' OR state <> 'CA'
3%
SELECT fname, lname, state FROM authors WHERE state <> 'NY' AND state <> 'NJ' OR state <> 'CA'
3%
SELECT fname, lname, state FROM authors WHERE state <> 'NY' OR state <> 'NJ' AND state <> 'CA'
6%
Посмотреть ответ
👍6
Руководство для начинающих по MySQL
MySQL — одна из наиболее используемых СУБД, т.к. она поддерживается почти всеми ОС и распространяется как свободное программное обеспечение. Поэтому, MySQL популярна среди разработчиков сайтов и веб-приложений.
Однако без хорошего гайда достаточно трудно разобраться в этапах создания баз данных. В этом руководстве подробно описывается, как установить MySQL, создать БД и таблицы, а также сделать первые запросы:
https://wiki.gentoo.org/wiki/MySQL/Startup_Guide/ru
MySQL — одна из наиболее используемых СУБД, т.к. она поддерживается почти всеми ОС и распространяется как свободное программное обеспечение. Поэтому, MySQL популярна среди разработчиков сайтов и веб-приложений.
Однако без хорошего гайда достаточно трудно разобраться в этапах создания баз данных. В этом руководстве подробно описывается, как установить MySQL, создать БД и таблицы, а также сделать первые запросы:
https://wiki.gentoo.org/wiki/MySQL/Startup_Guide/ru
❤2👍1
This media is not supported in your browser
VIEW IN TELEGRAM
SELECT ... FROM ... VERSIONS BETWEEN TIMESTAMP <start_dt> AND <end_dt>Возвращаются изменения в диапазоне дат.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
sudo -u postgres psql -d dbname -c "SELECT * FROM table;"
Здесь
dbname — это название вашей БД, table – имя таблицы. Разумеется, используем права суперпользователя
sudo для переключения пользователя на postgres, psql является инструментом командной строки PostgreSQL, а ключ -c нужен для выполнения конкретного запроса.-t, который выводит данные построчно, и -X для того, чтобы .psqlrc не обрабатывался командой psql.Пишите, кстати, если сталкивались с такими кейсами
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Приемы очистки данных в SQL
1. Выявление и удаление дублирующих записей
SELECT DISTINCT column1, column2, ...
FROM table_name;
В качестве альтернативы можно использовать
2. Стандартизация текстовых полей
Вы также можете использовать функцию
3. Обработка отсутствующих или нулевых значений
Затем вы можете удалить эти записи или заменить отсутствующие значения значением по умолчанию. Например:
4. Удаление кривых символов
5. Обработка выбросов
Чтобы определить и удалить выбросов, мы можем использовать функции
6. Корректировка форматов дат
Функция STR_TO_DATE может преобразовать строку в формат даты. Синтаксис функции следующий:
7. Очистка текстовых данных
Функция
8. Проверка типов данных
Важно убедиться, что ваши данные имеют правильный тип данных. Для проверки и преобразования типов данных можно использовать функции
1. Выявление и удаление дублирующих записей
SELECT DISTINCT column1, column2, ...
FROM table_name;
В качестве альтернативы можно использовать
GROUP BY, чтобы сгруппировать похожие записи вместе, а затем удалить количество записей в каждой группе.SELECT column_name, COUNT(*)
FROM table_name
GROUP BY column_name
HAVING COUNT(*) > 1;2. Стандартизация текстовых полей
UPDATE table_name
SET column_name = UPPER(column_name);Вы также можете использовать функцию
REPLACE для замены определенных символов или строк в текстовых полях. Например:UPDATE table_name
SET column_name = REPLACE(column_name, 'OldString', 'NewString');3. Обработка отсутствующих или нулевых значений
SELECT column1, column2, ...
FROM table_name
WHERE column_name IS NULL;Затем вы можете удалить эти записи или заменить отсутствующие значения значением по умолчанию. Например:
UPDATE table_name
SET column_name = 'DefaultValue'
WHERE column_name IS NULL;4. Удаление кривых символов
UPDATE table_name
SET column_name = REPLACE(column_name, 'InvalidChar', '');
UPDATE table_name
SET column_name = REGEXP_REPLACE(column_name, '[^a-zA-Z0–9 ]', '');5. Обработка выбросов
Чтобы определить и удалить выбросов, мы можем использовать функции
AVG и STDDEV для расчета среднего и стандартного отклонения столбца.SELECT AVG(column_name), STDDEV(column_name)
FROM table_name;6. Корректировка форматов дат
Функция STR_TO_DATE может преобразовать строку в формат даты. Синтаксис функции следующий:
SELECT STR_TO_DATE(date_string, format_string)
FROM table_name;7. Очистка текстовых данных
Функция
REPLACE может заменить подстроку в строке. Функция TRIM позволяет удалить из строки ведущие и последующие пробелы. Синтаксис выглядит следующим образом:SELECT UPPER(column_name)
FROM table_name;SELECT REPLACE(column_name, 'old_string', 'new_string')
FROM table_name;
SELECT TRIM(column_name)
FROM table_name;8. Проверка типов данных
Важно убедиться, что ваши данные имеют правильный тип данных. Для проверки и преобразования типов данных можно использовать функции
CAST или CONVERT. Например:SELECT CAST(column_name AS INT)
FROM table_name;
SELECT CONVERT(column_name, DATE)
FROM table_name;👍4
Уроки по T-SQL
Предлагаем вашему просмотру подробные 7 уроков.
В базу уроков входят основные понятия, работа с временными таблицами, разбор выборки данных и многое другое
📘Видео урок
Предлагаем вашему просмотру подробные 7 уроков.
В базу уроков входят основные понятия, работа с временными таблицами, разбор выборки данных и многое другое
📘Видео урок
👍1
SQLMesh - это фреймворк для преобразования данных, который позволяет командам, работающим с данными, использовать преимущества DevOps. Она позволяет ученым, аналитикам и инженерам эффективно выполнять и развертывать преобразования данных, написанные на SQL или Python.
SQLMesh обеспечивает точность и эффективность построения конвейеров данных с помощью пробвинутого решения DataOps для преобразования, тестирования и совместной работы.
Виртуальные среды данных позволяют команде разработчиков создавать динамические представления данных, гарантируя, что таблицы не будут создаваться более одного раза. Модульные тесты, аудиты и Data Diff обеспечивают проверку на протяжении всего рабочего процесса разработки, что позволяет легко работать с данными.
▪ Github
▪ Подробнее
▪ Документация
SQLMesh обеспечивает точность и эффективность построения конвейеров данных с помощью пробвинутого решения DataOps для преобразования, тестирования и совместной работы.
Виртуальные среды данных позволяют команде разработчиков создавать динамические представления данных, гарантируя, что таблицы не будут создаваться более одного раза. Модульные тесты, аудиты и Data Diff обеспечивают проверку на протяжении всего рабочего процесса разработки, что позволяет легко работать с данными.
pip install sqlmesh▪ Github
▪ Подробнее
▪ Документация
👍2
#вопросы_с_собеседований
Как распарсить строку в SQL?
Часто возникает необходимость распарсить строку в SQL запросе, чтобы получить отдельные элементы. Существует несколько способов это сделать.
1. Использование функции SUBSTRING
Для извлечения отдельных элементов из строки можно использовать функцию SUBSTRING.
2. Использование функции CHARINDEX
Для извлечения подстроки из строки можно использовать функцию CHARINDEX.
3. Использование функции PARSENAME
Для извлечения отдельных элементов из строки, разделенных определенным символом, можно использовать функцию PARSENAME.
Как распарсить строку в SQL?
Часто возникает необходимость распарсить строку в SQL запросе, чтобы получить отдельные элементы. Существует несколько способов это сделать.
1. Использование функции SUBSTRING
Для извлечения отдельных элементов из строки можно использовать функцию SUBSTRING.
2. Использование функции CHARINDEX
Для извлечения подстроки из строки можно использовать функцию CHARINDEX.
3. Использование функции PARSENAME
Для извлечения отдельных элементов из строки, разделенных определенным символом, можно использовать функцию PARSENAME.
👍7
Каким будет вывод INSTR(‘FREETIMELEARN’, ‘M’)?
Anonymous Quiz
29%
7
12%
6
17%
MELEARN
13%
FREETI
29%
Посмотреть ответ
👍4
Задача SQL
У вас в базе данных есть две таблицы: TABLE1 и TABLE2. Нужно ответить на один простой вопрос: отработает ли данный запрос или упадет с ошибкой? И объяснить, почему.
Примечание: все поля существуют в таблице и соответствуют нужному типу данных.
Ответ
Да, отработает. Классический пример аналитической функции, внутри которой сначала выполняется группировка (partition by), потом выполняется сортировка (order by) и применяется агрегирующая функция. В данном случае все написано правильно. Этот вопрос проверяет у кандидата знание оконных функций.
У вас в базе данных есть две таблицы: TABLE1 и TABLE2. Нужно ответить на один простой вопрос: отработает ли данный запрос или упадет с ошибкой? И объяснить, почему.
select id,sum(value) over(partition by i order by y), * from table1Примечание: все поля существуют в таблице и соответствуют нужному типу данных.
Ответ
👍14
Экранирование двоичных данных в SQL
В современном веб-разработке базы данных используются повсеместно. При работе с БД часто возникает необходимость хранить двоичные данные, такие как изображения или видео. Однако, есть риск того, что двоичные данные могут содержать символы, которые могут быть восприняты как специальные символы в SQL, что может привести к непреднамеренной модификации данных.
Экранирование двоичных данных
Для экранирования двоичных данных в SQL мы можем использовать функцию mysqli_real_escape_string(). Эта функция автоматически экранирует специальные символы, такие как одинарные кавычки, двойные кавычки и обратные слеши. Чтобы использовать эту функцию, мы должны сначала установить соединение с базой данных, а затем вызвать функцию, передав ей двоичные данные в качестве аргумента.
Пример экранирования двоичных данных в PDO
«PDO – PHP Data Objects – это прослойка, которая предлагает универсальный способ работы с несколькими базами данных.»
В PDO можно экранировать двоичные данные с помощью метода quote(). Этот метод автоматически экранирует специальные символы и возвращает заключенную в кавычки строку. Для использования этого метода мы должны сначала установить соединение с базой данных, а затем вызвать метод quote(), передав ему двоичные данные в качестве аргумента.
В современном веб-разработке базы данных используются повсеместно. При работе с БД часто возникает необходимость хранить двоичные данные, такие как изображения или видео. Однако, есть риск того, что двоичные данные могут содержать символы, которые могут быть восприняты как специальные символы в SQL, что может привести к непреднамеренной модификации данных.
Экранирование двоичных данных
Для экранирования двоичных данных в SQL мы можем использовать функцию mysqli_real_escape_string(). Эта функция автоматически экранирует специальные символы, такие как одинарные кавычки, двойные кавычки и обратные слеши. Чтобы использовать эту функцию, мы должны сначала установить соединение с базой данных, а затем вызвать функцию, передав ей двоичные данные в качестве аргумента.
Пример экранирования двоичных данных в PDO
«PDO – PHP Data Objects – это прослойка, которая предлагает универсальный способ работы с несколькими базами данных.»
В PDO можно экранировать двоичные данные с помощью метода quote(). Этот метод автоматически экранирует специальные символы и возвращает заключенную в кавычки строку. Для использования этого метода мы должны сначала установить соединение с базой данных, а затем вызвать метод quote(), передав ему двоичные данные в качестве аргумента.
👍4🔥1
Как модифицировать данные в нескольких таблицах и вернуть id затронутых записей в одном запросе?
WITH
updated AS (
UPDATE table1
SET x = 5, y = 6 WHERE z > 7
RETURNING id
),
inserted AS (
INSERT INTO table2 (x, y, z) VALUES (5, 7, 10)
RETURNING id
)
SELECT 'table1_updated' AS action, id
FROM updated
UNION ALL
SELECT 'table2_inserted' AS action, id
FROM inserted;👍6😱1
SELECT fname, lname, state FROM authors WHERE state NOT IN ('NY', 'NJ', 'CA')
Какой запрос из списка эквивалентен запросу из задачи?
Какой запрос из списка эквивалентен запросу из задачи?
Anonymous Quiz
64%
SELECT fname, lname, state FROM authors WHERE state <> 'NY' AND state <> 'NJ' AND state <> 'CA'
24%
SELECT fname, lname, state FROM authors WHERE state <> 'NY' OR state <> 'NJ' OR state <> 'CA'
4%
SELECT fname, lname, state FROM authors WHERE state <> 'NY' AND state <> 'NJ' OR state <> 'CA'
3%
SELECT fname, lname, state FROM authors WHERE state <> 'NY' OR state <> 'NJ' AND state <> 'CA'
5%
Посмотреть ответ
❤3👍2