select name, Milliseconds
from tracks
where UnitPrice =0.99
order by Milliseconds limit 1
-------- Группировки в БД ---------
Агрегатные функции в группировках по стране или стране-городу
select country, city, count(*), sum(age), max(age), min(age), avg(age)
from customers
group by country, city
Сколько продаж было сделано в каждом году?
select date(SalesDate, 'start of year'), count(*)
from sales
group by date(SalesDate, 'start of year')
или так
select strtime('&Y', SalesDate), count(*)
from sales
group by strtime('&Y', SalesDate)
В какие немецкие города в 2009 было сделано больше одной продажи?
select ShipCity, count(*)
from sales
where ShipCountry = 'Germany', and SalesDate >= date('2009-01-01') and SalesDate < date ('2010-01-01')
group by ShipCity
having count(*)>1
--------------------------
JOINы
select FirstName, LastName, 'Клиенты' from customers
union all
select FirstName, LastName, 'Сотрудники' from employees
так отбросит дубликаты из двух таблиц (сделает distinctы)
select FirstName from customers
union
select FirstName from employees
- для 3 занятия ---
Строим запрос для табилцы, которая нужна в отчете: Страна отгрузки Кол-во продаж Количество уникальных клиентов
select ShipCountry, count(*) as cnt, count(distinct CustomerId) as cnt_dist
from sales
group by ShipCountry
---
select * -- sum(UnitPrice*Quantity)
from sales as sales
inner join sales_items as si
on s.salesid = si.salesid
where SalesDate >=date('2012-01-01') and SalesDate < date('2013-01-01')
Показать статистику продаж по годам. Поля: Год, Кол-во продаж, Сумма продаж в рублях, Средний чек в рублях, количество уникальных покупателей
select date(SalesDate, 'start of year') as [Год продажи]
,COUNT(DISTINTCT S.salesid) as [Продажи,#]
,sum(si.UnitPrice*si.Quantity) as [Продажи, руб]
,round(avg(si.UnitPrice*si.Quantity),2) as [Средний чек, руб]
,count(distinct s.customerid) as [Количество уникальных клиентов]
from sales as sales
inner join sales_items as si
on s.salesid = si.salesid
where SalesDate >=date('2012-01-01') and SalesDate < date('2013-01-01')
Показать статистику продаж по возрастам. Поля: Год Возрастная группа Кол-во продаж Сумма продаж
Нужна методология определения возрастных группа
Методология:
до 18 лет = '1. Подростки'
от 19 до 30 = '2. Молодежь'
от 31 до 50= '3. Взрослые'
от 55 = '4. Пенсионеры'
with q1 as (
select FirstName, LastName, Age
, case when age <=18 then '1. Подростки'
when age >19 and age <=30 then '2. Молодежь'
when age >31 and age <=55 then '3. Взрослые'
when age >55 then '4. Пенсионеры'
end as age_type
from customers
)
select * from q1
select * from sales as sales
inner join q1 on q1.customerid = s.customerid
inner join sales_items as si
on si.SalesId = s.SalesId
select strtime('%Y', salesdate) as YYYY, age_type, count(distinct, s.SalesID) as count_sales, sum(si.UnitPrice*si.Quantity) as sum_sales
from sales as sales
inner join q1 on q1.customerid = s.customerid
inner join sales_items as si
on si.SalesId = s.SalesId
where strtime('%Y', salesdate) in ('2011', '2012', '2013')
group by strtime('%Y', salesdate), age_type
Виды JOINов
UNION
ALL -- полный
DISTINTCT - исключающий
JOIN
CROSS
INNER
OUTER
LEFT
RIGHT
FULL
