Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SQL-запрос, помогите плиз!  [new]
-SWAN-
Member

Откуда: Оделся, обулся - и на работу вернулся!)
Сообщений: 207
Доброго всем времени суток!
Подскажите плз, как сделать одним запросом следующее:
есть таблица, в ней 2 столбца - ФИО и Долг.
Как вывести первые 10 строк с максимальным долгом?
Использовать TOP и ORDER нельзя! Также нельзя использовать ROW NUMBER!
Спасибо заранее за советы!
16 ноя 16, 15:21    [19900422]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос, помогите плиз!  [new]
SASdev
Member

Откуда:
Сообщений: 24
-SWAN-, а select можно использовать?
16 ноя 16, 15:22    [19900431]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос, помогите плиз!  [new]
aleks2
Guest
SASdev
-SWAN-, а select можно использовать?

Ментальным усилием надо.
16 ноя 16, 15:34    [19900482]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос, помогите плиз!  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
-SWAN-,

это что, задачка из серии - как плац подметать при помощи лома? :)
16 ноя 16, 15:35    [19900485]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос, помогите плиз!  [new]
-SWAN-
Member

Откуда: Оделся, обулся - и на работу вернулся!)
Сообщений: 207
SASdev, ))) да конечно)) вот такую дурацкую задачу мне задали на собеседовании))
16 ноя 16, 15:36    [19900494]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос, помогите плиз!  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
-SWAN-,

SELECT 
	Name,
	object_id,
	RX
FROM 
(
	SELECT Name,object_id,
	(
		SELECT 
			COUNT(*)
		FROM sys.objects 
		WHERE	
			object_id >= a.object_id 
	) as Rx
	FROM sys.objects a 
)  x
WHERE 
	Rx BETWEEN 1 AND 10
	
16 ноя 16, 15:37    [19900500]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос, помогите плиз!  [new]
-SWAN-
Member

Откуда: Оделся, обулся - и на работу вернулся!)
Сообщений: 207
TaPaK, огромное спасибо! Идею решения понял!)))
16 ноя 16, 15:47    [19900546]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос, помогите плиз!  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
-SWAN-
TaPaK, огромное спасибо! Идею решения понял!)))

мммммм... идея решения описана в ТОП 10 самых популярных вопросов
16 ноя 16, 15:51    [19900570]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос, помогите плиз!  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Совершенно безумный запрос, т.к. он создаст минимум N^2/2 комбинаций при просмотре.
16 ноя 16, 16:15    [19900666]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос, помогите плиз!  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Владислав Колосов,

SELECT *
FROM 
(
	SELECT a.Name,a.object_id,COUNT(b.object_id) as Rx
	FROM 
		sys.objects a 
	JOIN
		sys.objects b
	ON
		b.object_id >= a.object_id 
	GROUP BY 
		a.Name,a.object_id
) as Rx
WHERE 
	Rx BETWEEN 1 AND 10
16 ноя 16, 16:22    [19900685]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос, помогите плиз!  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
TaPaK,

так сама идея с подсчетом приводит к возведению в квадрат количества строк и просмотри половины сочетаний "расстояний" между ними :) Это как подсчитать длины строк в шахматке.
16 ноя 16, 16:38    [19900783]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос, помогите плиз!  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Владислав Колосов
TaPaK,

так сама идея с подсчетом приводит к возведению в квадрат количества строк и просмотри половины сочетаний "расстояний" между ними :) Это как подсчитать длины строк в шахматке.

к чему это?
16 ноя 16, 16:40    [19900789]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос, помогите плиз!  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
TaPaK,

к тому, что оба запроса перебирают 6 млн строк.
16 ноя 16, 17:50    [19901007]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос, помогите плиз!  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Владислав Колосов
TaPaK,

к тому, что оба запроса перебирают 6 млн строк.

ещё раз: к чему это? Вопрос про выбор без сортировок и тп,про оптимизацию тот вопросов нет, предложите свой ваириант
16 ноя 16, 17:57    [19901026]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос, помогите плиз!  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
TaPaK,

если в глобальном смысле, то этот тест на сообразительность не имеет практической ценности.
16 ноя 16, 18:00    [19901034]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос, помогите плиз!  [new]
aleks2
Guest
Владислав Колосов
TaPaK,

так сама идея с подсчетом приводит к возведению в квадрат количества строк и просмотри половины сочетаний "расстояний" между ними :) Это как подсчитать длины строк в шахматке.


Был бы сообоазительнее - поставил бы top(11) поздапросе и сэкономил бв миллионы.
16 ноя 16, 20:01    [19901206]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос, помогите плиз!  [new]
o-o
Guest
aleks2
Владислав Колосов
TaPaK,

так сама идея с подсчетом приводит к возведению в квадрат количества строк и просмотри половины сочетаний "расстояний" между ними :) Это как подсчитать длины строк в шахматке.


Был бы сообоазительнее - поставил бы top(11) поздапросе и сэкономил бв миллионы.

-SWAN-
Использовать TOP и ORDER нельзя! Также нельзя использовать ROW NUMBER!

Прочесть нет, но обосрать успел, да
16 ноя 16, 20:07    [19901213]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос, помогите плиз!  [new]
PaulWist
Member

Откуда:
Сообщений: 2231
TaPaK
-SWAN-,

SELECT 
	Name,
	object_id,
	RX
FROM 
(
	SELECT Name,object_id,
	(
		SELECT 
			COUNT(*)
		FROM sys.objects 
		WHERE	
			object_id >= a.object_id 
	) as Rx
	FROM sys.objects a 
)  x
WHERE 
	Rx BETWEEN 1 AND 10
	


Предложенный запрос "не работает":

create table #test (fio nvarchar(10), debt money)

insert into #test
select '1', 10
union
select '2', 10
union
select '3', 10
union
select '4', 10
union
select '5', 10
union
select '6', 10
union
select '7', 10
union
select '8', 10
union
select '9', 1000
union
select '10', 100
union
select '11', 100
union
select '12', 10

select * 
from 
(
	select 
	a.debt, 
	a.fio,
	count(b.fio) as RX
	from #test a
	join 
	#test b
	on b.fio >= a.fio 
	group by   a.fio, a.debt 
) Rx where RX between 1 and 10	

drop table #test
17 ноя 16, 09:55    [19902263]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос, помогите плиз!  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
PaulWist,

Вам рано на собеседования ходить :)
кроме того что не смогли правильно переписать, ещё и ПОЧЕМУ ВЫ fio сравниваете???
17 ноя 16, 09:59    [19902275]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос, помогите плиз!  [new]
PaulWist
Member

Откуда:
Сообщений: 2231
TaPaK
PaulWist,

Вам рано на собеседования ходить :)


Как говорилось в одной известной кино-сказке: "я не волшебник, я только учусь" (с) :)

TaPaK
...кроме того что не смогли правильно переписать...


1. Да действительно, в репосте показан ваш первый запрос.

2. Скрип сделан из вашего "второго" запроса, тут возможно ввёл в заблуждение.

TaPaK
..., ещё и ПОЧЕМУ ВЫ fio сравниваете???


1. Конечно, тестовая задача "малёк" не "додуманная", те не учитывает, "а если должников с максимальными суммами будет меньше чем 10".

2. Поскольку в задаче требуется вывести 10 должников, то как я понимаю запрос должен вернуть 10 записей (возможно моё понимание неправильное, но так мною понята задача) :)
17 ноя 16, 10:30    [19902410]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос, помогите плиз!  [new]
o-o
Guest
Задача может и малек, но кто-то ищет максимальные фамилии
17 ноя 16, 10:39    [19902440]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос, помогите плиз!  [new]
PaulWist
Member

Откуда:
Сообщений: 2231
o-o
Задача может и малек, но кто-то ищет максимальные фамилии


Да, согласен.

Задачу - неправильно понял. :(

2TaPaK

Ваш код рабочий.

PS

"А у меня муж волшебник."
"Был неправ, вспылил"
(с) Обыкновенное чудо
17 ноя 16, 10:46    [19902473]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить