Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2015, 00:36   #1
Marinaio
Новичок
Джуниор
 
Регистрация: 08.04.2015
Сообщений: 2
Сообщение Написать второй вариант запроса

Доброго времени суток, Форумчане!
В институте получила задание. Нужно составить иной вариант запроса. Т.е. с/без join, с/без group by, как я поняла, и подобное. Запросы делаются к стандартной базе MS SQL Server 2008 R2 AdventureWorksDW.
Много проболела и сама никак не разберусь, помогите, пожалуйста!

Всего 13 запросов. Пример запроса:
Код:
/*Старейший сотрудник*/
select e1.* from DimEmployee as e1  where e1.BirthDate = (select min(e2.BirthDate) from DimEmployee as e2)
Код:
/*Старейшая сотрудница*/
select * from DimEmployee where Gender='F' AND BirthDate = (select min(BirthDate) from DimEmployee where Gender='F')
Таблица с запросами в Google Docs
БД

Заранее спасибо всем откликнувшимся!
Marinaio вне форума Ответить с цитированием
Старый 09.04.2015, 08:26   #2
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

[QUOTE=Marinaio;1488434] Запросы делаются к стандартной базе MS SQL Server 2008 R2 AdventureWorksDW.[/CODE]

Как вы определили что она стандартная?

Цитата:
Т.е. с/без join, с/без group by
мне кажется не делать group by используя min / max в mssql не очень правильно


Цитата:
select e1.* from DimEmployee as e1 where e1.BirthDate = (select min(e2.BirthDate) from DimEmployee as e2)
- типа этого вам надо?
Код:
select min(e1.BirthDate) from DimEmployee e1 GROUP BY e1.BirthDate
остальные по аналогии=)
Я часть той силы, что вечно хочет зла, но вечно совершает благо..

Последний раз редактировалось Stanislav; 09.04.2015 в 08:30.
Stanislav вне форума Ответить с цитированием
Старый 09.04.2015, 11:33   #3
Marinaio
Новичок
Джуниор
 
Регистрация: 08.04.2015
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Stanislav Посмотреть сообщение
Как вы определили что она стандартная
Если скачать SQL Server, то к нему есть готовые базы. Вот это готовая как раз.
Цитата:
Сообщение от Stanislav Посмотреть сообщение
мне кажется не делать group by используя min / max в mssql не очень правильно
Станислав, наверно, Вы правы, но я за что взяла, за то и продаю)
Я не знаю. По-всякому можно, лишь бы не так как было.
Цитата:
Сообщение от Stanislav Посмотреть сообщение
- типа этого вам надо?
Думаю, да. По аналогии все запросы так можно сделать?
Marinaio вне форума Ответить с цитированием
Старый 09.04.2015, 11:39   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
мне кажется не делать group by используя min / max в mssql не очень правильно
MS SQL вполне допускает - группировка по всем выбранным данным
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.04.2015, 20:32   #5
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
MS SQL вполне допускает - группировка по всем выбранным данным
Возможно и вы правы, но ...

Код:
Because you have listed one column in your SELECT statement that
 is not encapsulated in the MIN function, you must use a GROUP BY clause.
 The department field must, therefore, be listed in the GROUP BY section.
ну must так must ...

Цитата:
Глагол must переводится как "должен". Это самый "сильный" глагол долженствования. Must - это приказ. Следовательно, нужно быть осторожным при использовании данного модального глагола, так как не многие люди нам что-то должны.
Я часть той силы, что вечно хочет зла, но вечно совершает благо..

Последний раз редактировалось Stanislav; 09.04.2015 в 20:35.
Stanislav вне форума Ответить с цитированием
Старый 09.04.2015, 20:33   #6
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Цитата:
Сообщение от Marinaio Посмотреть сообщение
Думаю, да. По аналогии все запросы так можно сделать?
Напишите а мы проверим, все просто.
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума Ответить с цитированием
Старый 09.04.2015, 20:45   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ключевой момент:
Цитата:
is not encapsulated in the MIN function
Изображения
Тип файла: jpg Безымянный.jpg (16.4 Кб, 77 просмотров)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.04.2015, 22:23   #8
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Ключевой момент:
Простите а в чем его ключевость если -
Цитата:
you must use a GROUP BY clause.
Вообщем вы конечно же правы: дядя msdn

Код:
Examples

A.Simple example

The following example returns the lowest (minimum) tax rate. The example uses the AdventureWorks2012 database

SELECT MIN(TaxRate)
FROM Sales.SalesTaxRate;
GO

Here is the result set.

-------------------

5.00

(1 row(s) affected)
если в выборке больше чем одно ты мы должны использовать group by, mysql - сожрал бы ничего не сказав
Я часть той силы, что вечно хочет зла, но вечно совершает благо..

Последний раз редактировалось Stanislav; 09.04.2015 в 22:25.
Stanislav вне форума Ответить с цитированием
Старый 09.04.2015, 22:31   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Простите а в чем его ключевость
- если в списке есть поля не входящие в агрегатную функцию - это и есть is not encapsulated in the MIN function. А в примере нет таких. А то, что может mysql вопрос второй, как по мне это нововведение в нем от лукавого. Но речь о MS SQL
Цитата:
если в выборке больше чем одно ты мы должны использовать group by
Моя твоя не понимай - больше чем одно - что? Так что ли нельзя:
Код:
SELECT Min(a1),COUNT(*),MIN(a2),MAX(a2) FROM Таблица
Та хоть сто порций
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 09.04.2015 в 22:35.
Аватар вне форума Ответить с цитированием
Старый 09.04.2015, 22:34   #10
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
- если в списке есть поля не входящие в агрегатную функцию - это и есть is not encapsulated in the MIN function. А в примере нет таких. А то, что может mysql вопрос второй, как по мне это нововведение в нем от лукавого. Но речь о MS SQL
простите но я просто забыл удалить это свое
Цитата:
Простите а в чем его ключевость если -
сначала поленился посмотреть оф. доку, потом почитал и написал что вы правы.

Цитата:
как по мне это нововведение в нем от лукавого
- нововведение а разве в ранних версиях нельзя было так писать?

естественно это неправильно, по мне это как php - прощает многие ошибки. mssql - приучает к дисциплине.

Еще раз извиняюсь, трудный день.


Цитата:
Моя твоя не понимай - больше чем одно - что? Так что ли нельзя:
да не типа этого ...

Код:
SELECT a.City, COUNT(bea.AddressID) EmployeeCount
FROM Person.BusinessEntityAddress AS bea 
    INNER JOIN Person.Address AS a
        ON bea.AddressID = a.AddressID
GROUP BY a.City
ORDER BY a.City;
Я часть той силы, что вечно хочет зла, но вечно совершает благо..

Последний раз редактировалось Stanislav; 09.04.2015 в 22:41.
Stanislav вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите написать 3 запроса ankik13 SQL, базы данных 0 14.01.2015 20:41
Вариант по хаскелу nefilim14 Помощь студентам 0 03.05.2014 11:38
Написать 2 запроса на SQL для Access Dia.bolik Помощь студентам 0 27.11.2012 19:48
Ассемблер вариант № 2 arb1337 Помощь студентам 2 27.09.2011 10:42
Написать програму проверки знания даты второй мировой войны. TurboPaskal Паскаль, Turbo Pascal, PascalABC.NET 22 24.04.2008 19:10