
	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