
SQL
Помогите пожалуйста составить sql запрос
Тренер дал задачу. Но я не пойму как ее сделать, хотя я вроде бы всё учила. Почему в данных таблицах нету количества заказов, и почему client id и client id так сильно различаются?

Вам даны выдержки таблиц - т.е. НЕполные таблицы, а несколько рандомных записей. Реально в них могут быть миллионы строк.
select c.lastname, c.firstname, cc.count_orders
from client c
join (
select c.clientid, count(o.orderid) as count_orders
from orders o
join client c on o.clientid = c.clientid
where orderdate between date'2015-01-01' and date'2016-01-01'
group by c.clientid
having count(o.orderid) > 25
) cc on c.clientid = cc.clientid
order by cc.count_orders desc
Тебе уже объясняли - это фрагменты таблиц. На самом деле в них должно быть гораздо больше данных. Тогда и соответствия ключей будут, и все остальное. А ты, похоже, пытаешься найти 25 записей при 6 данных - вот у тебя ничего и не выходит.
Тебе Jurijus Zaksas уже давал текст запроса - в прошлой копии твоего вопроса. Но если в прошлый раз не хватило, то та же самая идея в немного иной реализации:
SELECT MAX(c.LastName), MAX(c.FirstName), COUNT(o.OrderID)
FROM Client AS c
INNER JOIN Orders AS o
ON o.ClientID = c.ClientID
WHERE o.OrderDate BETWEEN '2015-01-01' AND '2015-21-31'
GROUP BY c.ClientID
HAVING COUNT(o.OrderID) > 25
ORDER BY COUNT(o.OrderID) DESC
Всё остальное, перечисленное в твоём вопросе, ты можешь узнать самостоятельно - открыв любой учебник SQL (коих на Озоне как грязи) и начав его читать.количество заказов тебе самой надо посчитать.
А client id отличается, потому что в таблице заказов он не обязан быть уникальным, и не все клиенты делали ровно по одному заказу в порядке возрастания.
А client id отличается, потому что в таблице заказов он не обязан быть уникальным, и не все клиенты делали ровно по одному заказу в порядке возрастания.
как вариант
select o2.id ,c.lastname,c.firstname,o2.cnt
from (
select o.clientid,count(o.orderid) as cnt
from orders o
where extract(year from o.orderdate)=2015
group by 1
having count(o.orderid)>25
) o2
left join client c on c.clientid=o2.clientid
order by 4 desc
select o2.id ,c.lastname,c.firstname,o2.cnt
from (
select o.clientid,count(o.orderid) as cnt
from orders o
where extract(year from o.orderdate)=2015
group by 1
having count(o.orderid)>25
) o2
left join client c on c.clientid=o2.clientid
order by 4 desc
Похожие вопросы
- Помогите написать sql запросы
- SQL-запрос Вывести идентификаторы всех владельцев комнат
- SQL запрос Найдите какой процент пользователей, зарегистрированных на сервисе бронирования
- PL SQL Помогите пожалуйста как из этого запроса сделать функцию
- Sql запрос создания таблицы
- Можно ли в SQL запросе опустить слово AS? Пример:
- SQL запрос (like)
- SQL Запрос. Дублируются данные
- Добрый день! Помогите пожалуйста сообразить, как написать запрос
- Не очень понятен синтаксис запросов SQL
Изначально я не понимала задание так как там не хватало столбца с количеством заказов, я зашла на 6 урок sqlbolt и решила попробовать визуализировать, не знаю, переменные, ну подменить на уроке чтобы сделать тот самый запрос.
SELECT title, director, year FROM movies
inner join boxoffice on ID=movie_id
where year >2005 and rating like "8%"
order by year desc;
То есть я пыталась думать логически, и если перейти на урок и вписать данный запрос то по идее, всё что от меня требовалось в задании прекрасно отображаеться на таблице
Другие люди советовали делать extract но я sqlbolt я пытался его использовать не поняла как он работает. Собственно вопросы, логичнее было бы использовать using после join, мне подказали что если название столбцов одинаковое мжно использовать using.
Мне не понятно как использовать эти алиасы, опять же я пробовал их поиспользовать в sqlbolt то там инкорект кьюри. Просто мы не проходили это на уроках, наврядли в моём конечном ответе должны быть эти алиасы.
Насчёт between полностью согласна.
Что значит max в поле селект? и почему там сразу прописаны алиасы, система ведь будет ругаться что типо *нет такой строчки как o.LastName