Ежедневник IT-ка
133 subscribers
22 photos
4 videos
1 file
43 links
Программируем на практике!!
По вопросам по поводу проектов: @vladimir_dzen
Download Telegram
​​В прошлых постах публиковал о тех СУБД(MySql в частности), которые использую в своей практике и тут-же подвернулся интересный пример, который показывает 'МОЩЬ' языка программирования Sql.

Похожий запрос в практике встречается в 99% случаях.

Цель:
Сделать запрос, который укажет кол-во звонков с определенных площадок.

Дано:
Две разных таблицы в одной Б.Д.
1. ads_phones (первая таблица)
2. ads_calls (вторая таблица)

Решение:
SELECT ads_phones.note, ads_phones.phone, COUNT(ads_calls.call_to) AS count_call FROM ads_phones INNER JOIN ads_calls ON ads_calls.call_to = ads_phones.phone AND MONTH(ads_calls.created) = MONTH(NOW() - INTERVAL 1 MONTH) GROUP BY ads_calls.call_to HAVING COUNT(ads_calls.call_to) > 1 ORDER BY count_call DESC

Интересные моменты, на которые стоит обратить внимание.

а) Запрос формирует одну общую таблицу из двух(нескольких), где оператор ON - условие для сравнения(т.е. "номера телефонов" в табл. должны совпадать).
INNER JOIN ads_calls ON ads_calls.call_to = ads_phones.phone

б) Запрос делает выборку данных, за прошлый месяц.
MONTH(ads_calls.created) = MONTH(NOW() - INTERVAL 1 MONTH)

в) Запрос делает группировку данных согласно минимальному кол-ву, которые нам интересны(т.е. > 1).
GROUP BY ads_calls.call_to HAVING COUNT(ads_calls.call_to) > 1

Рекомендую сохранить пример этого запроса т.к. "Узнавать Кол-во" чего либо, приходиться очень часто.

#Sql, #MySql
4. Запрос и результат:

SELECT olx_sales_week_by_wh.sku,products.articul,products.name
FROM olx_sales_week_by_wh
 LEFT JOIN products ON olx_sales_week_by_wh.sku = products.sku2
WHERE olx_sales_week_by_wh.name ='Львов'
 AND products.category = 'кдх2б' GROUP BY olx_sales_week_by_wh.sku

Получили название товаров и артикулов, где sku(из 1-ой табл.) = sku2(из 2-ой табл.).

Внимание(важная часть запроса, без которой он просто бесполезен): LEFT JOIN products ON olx_sales_week_by_wh.sku = products.sku2

#Sql, #MySql
SELECT date, ROUND(sum(spend),2) spend
FROM `reklama` WHERE category = 'одеяла' AND (MONTH(date) = MONTH(CURRENT_DATE()) OR MONTH(date) = MONTH(CURRENT_DATE() - INTERVAL 1 MONTH))
GROUP BY date
ORDER BY date ASC

В этом запросе играет ключевую роль, функция MONTH() - предназначена для того, чтобы извлекать месяц из даты, как раз то, что нам необходимо.
И конечно, помним о том, чтобы увидеть все даты, необходимо сделать группировку GROUP BY date,без этой функции просто будет показана одна дата(одна строка).

#Sql, #MySql
​​3. Вопрос. Как получить правильный адрес хоста, чтобы подключиться к Б.Д.?

а). Запускаем "cmd"

б). Вбиваем: sqllocaldb s
где: sqllocaldb - база
s - старт сервера(обязательно)

в). Вбиваем: sqllocaldb i MSSQLLocalDB

выводятся ряд строк, но необходима только одна:

Имя канала экземпляра: np:\\.\pipe\LOCALDB#F8B4165B\tsql\query

Вот это и есть адрес хоста, к которому необходимо подключиться.

#Sql, #MySql