Left join і вкладені запити - вирішення повсякденних завдань


Тобто, для кожної дати нам необхідно порахувати кількість замовлень в день, кількість покупців в день і повний денний оборот.

Почнемо по порядку і спочатку виберемо унікальні дати запитом

Тут все елементарно, так що додамо кількість замовлень в день. У цьому нам допоможе конструкція LEFT JOIN (або LEFT OUTER JOIN - кому що більше подобається). Всередині неї ми будемо використовувати не готову таблицю, а результат запиту, який порахує потрібні нам цифри. Отже, спробуємо додати його

У нас уже з'являються псевдоніми для виключення збігу імен. Усередині запиту в LEFT JOIN отримуємо не тільки кількість замовлень, а й дату, щоб ці самі замовлення правильно присобачить до цих самих дат.

Логічно припустити, що інші стовпці додаються тим же чином. Для кількості покупців ми додамо ще один LEFT JOIN

Тут в запиті додана конструкція COUNT (DISTINCT), яка виключає неправильний результат підрахунку, адже серед 5 замовлень за 01.01 ми маємо тільки трьох унікальних покупців!

Для підрахунку денного обороту нам допоможе SQL-функція SUM ().

Як бачите, додався третій LEFT JOIN, який додає необхідні нам значення. В основній частині запиту я постійно використовую оператор AS, щоб стовпець мав людино-зрозуміле ім'я. Усередині LEFT JOIN AS також використовується для зручної передачі значень в основний запит.

В цілому запит виконується досить швидко, але варто зауважити, що це обумовлено по-перше простотою вкладених запитів, а по-друге - роботою з однієї невеликої таблицею.

Отже, на виході ми маємо рівно те, що і хотіли побачити!

Безпомилкового Вам коду!

Навігація по публікаціям

Доброго вам дня! Ніяк не можу зрозуміти, був запит SELECT `date` FROM` sum` GROUP BY `date` - по нього питань немає, після чого звідки береться SELECT s.date, t.count AS 'Кількість замовлень' FROM sum s
LEFT JOIN (SELECT date, COUNT (order_id) AS count FROM sum GROUP BY date) t ON s.date = t.date
GROUP BY s.date. що це за приставки? звідки взявся t.count? Будьте ласкаві поясніть будь ласка