Сегодня 14 мая, вторник ГлавнаяНовостиО проектеЛичный кабинетПомощьКонтакты Сделать стартовойКарта сайтаНаписать администрации
Поиск по сайту
 
Ваше мнение
Какой рейтинг вас больше интересует?
 
 
 
 
 
Проголосовало: 7273
Кнопка
BlogRider.ru - Каталог блогов Рунета
получить код
coding4.net
coding4.net
Голосов: 1
Адрес блога: http://www.coding4.net/
Добавлен: 2012-06-11 20:16:46
 

Задание по TSQL перед собеседованием

2014-08-22 17:16:00 (читать в оригинале)

----------------------------------------
-- ИСХОДНЫЕ ДАННЫЕ:
----------------------------------------
use tempdb
go
if object_id ('T') is not null drop table T
go
create table T (id int primary key, Number varchar(50), Price money)
go
insert into T (id, Number, Price) values (1, 'A', 100.00)
insert into T (id, Number, Price) values (2, 'A',  90.00)
insert into T (id, Number, Price) values (3, 'B', 200.00)
insert into T (id, Number, Price) values (4, 'C', 300.00)
insert into T (id, Number, Price) values (5, 'D', 300.00)
insert into T (id, Number, Price) values (6, 'D', 300.00)
GO

----------------------------------------
-- ЗАДАНИЕ 1:
-- удалить из таблицы T повторяющиеся номера Number, 
-- оставив в ней только номера с максимальной ценой,
-- по возможности, одним запросом.
----------------------------------------
--проверка после удаления:
select Number, Price from T order by 1, 2
/*
Number	Price
A	      100.00
B	      200.00
C	      300.00
D	      300.00
*/

----------------------------------------
-- РЕШЕНИЕ 1: 
----------------------------------------
DELETE FROM T
WHERE T.id NOT IN 
(
	SELECT id -- , Number, Price
	FROM
	( 
	  SELECT T.id AS id, T.Number AS Number, T.Price AS Price, 
                 ROW_NUMBER() OVER(PARTITION BY T.Number ORDER BY T.Number, T.Price DESC ) AS R 
	  FROM T 
	) AS PT
	WHERE R = 1
)
GO

----------------------------------------
-- ЗАДАНИЕ 2: 
-- порекомендуйте, какой построить индекс на таблице T,
-- чтобы уменьшить время выполнения запроса на удаление
----------------------------------------

----------------------------------------
-- РЕШЕНИЕ 2: 
----------------------------------------
-- 1) нужен индекс по ид, обычно он является первичным ключом и создается 
--    во время создания таблицы, поэтому предполагаем что он уже есть
-- 2) еще для ускорения нужен такой сложный индекс:
CREATE INDEX idxDelDuplicatesInT
	ON T (Number ASC, Price DESC)
GO

Тэги: sql, вопросы, собеседовании

 


Самый-самый блог
Блогер ЖЖ все стерпит
ЖЖ все стерпит
по сумме баллов (758) в категории «Истории»


Загрузка...Загрузка...
BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.