Имя: Пароль:
IT
Админ
Нужен нормальный самоучитель по SQL. Посоветуйте, пожалуйста.
0 Владимир1С
 
10.04.19
14:32
Читаю разные самоучители из инета. Попробовал решить простенькую задачку : Таблица(сотрудник, зарплата, начальник-ссылка на эту же таблицу, номер_отдела), надо вывести сотрудников с максимальной зарплатой в каждом отделе и номер_отдела.
Как найти такого в определённом отделе, не вопрос. А как сделать это для всех отделов, записанных в отделах - не пойму. Похоже, инета явно недостаточно для обучения.

Поэтому вопрос: какой самоучитель лучше, по мнению Гуру SQL?
1 Владимир1С
 
10.04.19
14:35
записанных в таблице
2 Cyberhawk
 
10.04.19
14:37
На 1С такое сделать тоже испытываешь трудности*
3 Cyberhawk
 
10.04.19
14:37
?
4 shuhard
 
10.04.19
14:37
(0)[инета явно недостаточно для обучения]
бред
5 sqr4
 
10.04.19
14:37
ДА вроде тут sql не причем. РС Срез последних. вот тут уже делали нечто подобное
6 sqr4
 
10.04.19
14:38
Кроме синтаксиса отличий не должно быть
7 Владимир1С
 
10.04.19
14:39
(2)(5) Голый SQL, без 1C.
8 sqr4
 
10.04.19
14:40
(7) Какая хер разница на каком языке запрос на русском или английском, переведи выбрать в select и делов то, замени ВТ на вложенность или как там я не спец
9 trad
 
10.04.19
14:40
А нету никакого самоучителя, только практика. Писать и писать запросы.

Без понимания как это работает - никакие буквы не зайдут
А с пониманием - буквы не нужны
10 1Сергей
 
10.04.19
14:41
Почитай про группировки в запросе. Гуглить надо уметь
11 Cyberhawk
 
10.04.19
14:41
(7) Ну так сделай на 1С, затем переведи на язык скуля
12 sqr4
 
10.04.19
14:41
(8) это имелось ввиду для конкретного случая с выборкой
13 Sserj
 
10.04.19
14:41
(7) Большая разница, в SQL слишком много возможностей не реализованных в 1С.
14 1Сергей
 
10.04.19
14:41
(11) Автор клюшечник
15 sqr4
 
10.04.19
14:42
(13) я уточнил в (12)
16 АНДР
 
10.04.19
14:42
17 sqr4
 
10.04.19
14:43
http://sql-ex.ru/
Во да отличная вещь, правда я быстро к ней охладел
18 Sserj
 
10.04.19
14:44
(15) Ну вот именно конкретно этот случай можно сделать классической группировкой, а можно выежнуться оконными функциями и в выежнутом случае на большой таблице будет ощутимый прирост проиозводительности так как они будут в несколько потоков лопатить.
19 Владимир1С
 
10.04.19
14:45
(16)(17) Большое спасибо.
20 fisher
 
10.04.19
14:51
Плюс за sql-ex.ru
Сам на нем учился, еще когда он по-другому назывался и не такой развесистый был. Там же была отличная справка по SELECT, которая как учебник канает. Задания очень удобно решать и проверять. При затыках можно на их форуме потолкаться, многие выкладывают свои решения.
21 13_Mult
 
10.04.19
14:57
(16) + "sql-ex.ru" Давненько я туда не заходил )
22 ptiz
 
10.04.19
15:04
(0) Я купил толстую книжку и читал в электричке (тогда интернет был так себе), очень помогло.
23 МихаилМ
 
10.04.19
15:05
24 fisher
 
10.04.19
15:22
Если сабжевую задачу решать для произвольной иерархии отделов, то это обычно через рекурсивные запросы решается (язык запросов 1С их не поддерживает). Также разные диалекты SQL обычно поддерживают некие аналоги одинэсовских ИТОГИ (в T-SQL - GROUP BY ROLLUP)
25 Владимир1С
 
10.04.19
15:24
(24) То есть эта задача может быть решена только через рекурсивный запрос?
26 fisher
 
10.04.19
15:45
(25) Разруливание иерархии лучше всего на рекурсию ложится. Иерархия плохо разруливается через обычные операции над множествами. Разрулить можно, но менее "красиво" и заложившись на какое-то максимальное количество уровней. Как вариант, можно использовать такой подход: http://catalog.mista.ru/public/158512/
27 scanduta
 
10.04.19
15:51
(0) Я когда к сертификации MCSA  по MS SQL готовился ,читал рекомендуемую литературу, она довольна толковая, но на английском вся

https://www.microsoftpressstore.com/store/exam-ref-70-761-querying-data-with-transact-sql-9781509304332
28 dmrjan
 
10.04.19
15:54
На примере PostgreSQL:
https://postgrespro.ru/education/courses/hacking
29 fisher
 
10.04.19
15:58
(25) Перечитал сабжевую задачу - там не требуется получать результат в иерархии отделов. Т.е. никаких особых ухищрений не требуется.
30 fisher
 
10.04.19
16:03
(25) Сабж решается либо коррелирующим запросом (более красивая конструкция), либо стандартной двухэтапной схемой:
1) во вложенном запросе с группировкой по отделу получаешь максимальные зарплаты по отделам
2) во внешнем запросе соединяешь вложенный запрос с исходной таблицей по отделу и максимальной зарплате.
В результате остаются только сотрудники с максимальными зарплатами в отделах
31 dezss
 
10.04.19
16:15
(30) Конструкция может и красивая, но только эффективная ли?
32 fisher
 
10.04.19
16:19
(31) Ты про коррелирующий подзапрос? Как правило, не менее эффективная. Не надо забывать, что SQL - это декларация требуемого результата, а не алгоритм его достижения. Ясен пень, что на практике не все так прекрасно, но простые коррелирующие подзапросы оптимизаторы запросов СУБД обычно разруливают вполне эффективно. Вплоть до идентичных планов выполнения с более эффективными на первый взгляд декларациями.
33 vitkhv
 
10.04.19
16:21
(23) best of the best
34 1Сергей
 
10.04.19
16:34
Мне в начале нулевых было достаточно MSDN и гугла для изучения скуля
35 dezss
 
10.04.19
16:48
(32) Ну если так, то хорошо.
Просто когда-то читал, что они не очень быстры, так как коррелирующий запрос выполняется для каждой строки исходного запроса.
36 Ёпрст
 
10.04.19
16:51
37 Ёпрст
 
10.04.19
16:51
она же есть в электронном виде
38 Владимир1С
 
10.04.19
16:52
(37) благодарю за ссылку!
39 Ёпрст
 
10.04.19
16:53
у этого эе автора есть книжка по оконным функциям
40 Владимир1С
 
10.04.19
17:05
(30) Ок.
41 vi0
 
10.04.19
17:16
(39) вот такие советчики и отбивают охоту к учебе
какие нахрен оконные функции?
42 vi0
 
10.04.19
17:20
(27) книга шикарная, автор книги шикарен, но это не то что просит в (0)
43 vi0
 
10.04.19
17:21
(27) > но на английском вся
давно уже есть переведенная, но перевод плох
44 vi0
 
10.04.19
17:24
(28) в (0) просит выбрать максимальную зп, ты ему внутреннюю архитектуру постгре советуеш
*смайлик стучащий головой об стену*
45 Ёпрст
 
10.04.19
17:27
(41) Если ты с ними не знаком, это не значит что они не нужны.
46 vi0
 
10.04.19
17:28
(45) ты читал вопрос в (0)? сам то используешь их в работе? сомневаюсь
47 Ёпрст
 
10.04.19
17:29
(46) даже на 7.7 использовал, если что.
А автор спрашивал за литературу хорошую.
Чего не устраивает ?
48 vi0
 
10.04.19
17:30
(47) а автора нулевой уровень если что
49 Ёпрст
 
10.04.19
17:32
(48) И ? Прочитав книжку в (36) прочитает еще и книжку по оконным функциям потом, если желание будет.
По крайней мере, автор книги очень внятно всё излагает
50 vi0
 
10.04.19
17:34
(49) не вали всё в кучу, не демотивируй
51 Владимир1С
 
10.04.19
17:35
(48) Если что, каждый из нас , было время, какал и писял в штанишки. Научились же, теперь почти всегда штаны сухие. Надо продвигаться, изучать, применять.
52 Sserj
 
10.04.19
17:37
(46) Я использую. К примеру аналог СрезПоследних через оконные функции работает на 30-40 процентов быстрее.
53 vi0
 
10.04.19
17:37
(52) у автора в (0) вопрос по логике, а не по оптимизации
54 vi0
 
10.04.19
17:38
(51) похоже вы нашли друг друга с епрстом
55 Sserj
 
10.04.19
17:40
(39) Именно книжку тоже давным дано искал, в итоге нашел того
Ицик Бен-Гана Microsoft SQL Server 2012 High-Performance T-SQL Using Window Functions
Только в виде сайтика :)
https://professorweb.ru/my/sql-server/window-functions/level1/
56 Владимир1С
 
10.04.19
18:10
(30) Заработал таки. Всем БольшоеСпасибо.ПробелЗаело.
57 Sserj
 
10.04.19
18:28
(56)

Ну попробуй еще вот так:

SELECT
  сотрудник, номер_отдела, зарплата
FROM
  (select
    сотрудник
    , номер_отдела
    , зарплата
   RUNK() OVER (partition by  номер_отдела,сотрудник ORDER BY зарплата DESC) as [УровеньЗП]
  from
    Таблица
  ) as РанжированнаяЗП
WHERE
  УровеньЗП = 1
58 vi0
 
20.04.19
06:49
(27) был неправ относительно этой книги
для новичка тоже очень подойдет
59 OldCondom
 
20.04.19
19:31
Пол Нильсен. Большая и великолепная книжка. Я по ней настраивал первый сервер + там доходчиво все описано в плане запросов. Считаю эту книгу ТОП-1
60 Конструктор1С
 
21.04.19
08:53
(7) всё то же самое, только имена операторов заменяешь на соответствующие им англоязычные.
ВЫБРАТЬ -> SELECT
ИЗ -> FROM
ГДЕ -> WHERE
(ЛЕВОЕ) СОЕДИНЕНИЕ -> (LEFT) JOIN
УПОРЯДОЧИТЬ ПО -> ORDER BY
СГРУППИРОВАТЬ ПО -> GROUP BY
61 rphosts
 
21.04.19
09:28
(0) understartingSQL, очень рульная книжка. Для начала самый лучший книг
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.