powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL-запрос, который выбирает все строки и все столбцы из условной таблицы содержит максима
13 сообщений из 13, страница 1 из 1
SQL-запрос, который выбирает все строки и все столбцы из условной таблицы содержит максима
    #40005558
Aforizm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите сделать SQL-запрос, который выбирает все строки и все столбцы из условной таблицы colors. Добавьте столбец, который
содержит максимальную цену телефона каждого цвета. Цены телефонов соответствующего цвета выбирать из таблицы
phone_price. Отсортируйте выборку по этому столбцу. Спасибо.

у меня не понятно что получается:(
select *, max(price)
from colors c join phone_price p on c.color_id=p.color_id
--where = max(price)
GROUP BY c.color_name
...
Рейтинг: 0 / 0
SQL-запрос, который выбирает все строки и все столбцы из условной таблицы содержит максима
    #40005564
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aforizm,

посмотрите в сторону MAX(price) OVER(partition by color_id)
...
Рейтинг: 0 / 0
SQL-запрос, который выбирает все строки и все столбцы из условной таблицы содержит максима
    #40005567
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну, или, если хочется group

Код: sql
1.
2.
select c.*, p.max_p
from colors c join (select color_id, max(price) as max_p from phone_price GROUP BY color_id) p on c.color_id=p.color_id
...
Рейтинг: 0 / 0
SQL-запрос, который выбирает все строки и все столбцы из условной таблицы содержит максима
    #40005573
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
godsql,

Мне как новичку тоже интересны такие задачки. Я как раз только начал использовать OVER (PARTITION..).

Если первое решение - select c.*, max(p.price) over partition(c.color) from colors c join prices p on "color" ,
а второе - джойн на группу, как во втором сообщении, то какое из них предпочтительнее с точки зрения опытного программиста?
...
Рейтинг: 0 / 0
SQL-запрос, который выбирает все строки и все столбцы из условной таблицы содержит максима
    #40005599
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НеофитSQL,

Все зависит от конкретной ситуации.
В данном случае я бы поставил на group.
Сначала подготавливаем таблицы,затем соединяем.
В 1 вар. Идёт сначала соединение, а потом работа с результатом для вычисления максимум на.
Но нужно смотреть на таблицы и какой план генерирует сервер, т.к. оптимизатор запросто может переделать запрос аналогично при выполнении

Over я предложил, т.к. тс хотел простое соединение таблиц.
Приеду на работу, поэксперементирую
...
Рейтинг: 0 / 0
SQL-запрос, который выбирает все строки и все столбцы из условной таблицы содержит максима
    #40005626
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как и ожидалось, в данном случае Group - эффективнее


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
--colors c join phone_price p on c.color_id=p.color_id
create table colors (
color_id int,
color varchar(20)
)
go
create table phone_price (
color_id int,
phone varchar(10),
price numeric (16,10)
)
go

insert into phone_price (color_id, phone, price)
 values (1, 'Moto', 100), (1, 'Moto', 250),(1, 'Moto', 50),(2, 'Samsung',100),(1, 'Samsung',100)
insert into colors (color_id, color)
 values (1, 'Blue'), (2, 'White'),(3, 'Black'),(4, 'Green'),(5, 'Red')

 set statistics time, io on 

 select distinct c.*, max(p.price) over( partition by p.color_id)  as m from colors c left join phone_price p on c.color_id= p.color_id
 order by 3

 select c.*, p.max_p
	from colors c left join (select color_id, max(price) as max_p from phone_price GROUP BY color_id) p on c.color_id=p.color_id
 order by p.max_p

 set statistics time, io off

 drop table phone_price
 drop table colors



(затронуто строк: 5)

(затронута одна строка)

(затронуто строк: 5)

(затронута одна строка)
Время синтаксического анализа и компиляции SQL Server:
время ЦП = 5 мс, истекшее время = 5 мс.
Внимание! Значение NULL исключено в агрегатных или других операциях SET.

(затронуто строк: 5)
Таблица "Worktable". Число просмотров 3, логических чтений 29, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "phone_price". Число просмотров 1, логических чтений 5, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "colors". Число просмотров 1, логических чтений 1, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.

(затронута одна строка)

Время работы SQL Server:
Время ЦП = 0 мс, затраченное время = 1 мс.
Время синтаксического анализа и компиляции SQL Server:
время ЦП = 0 мс, истекшее время = 2 мс.

(затронуто строк: 5)
Таблица "Worktable". Число просмотров 0, логических чтений 0, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "phone_price". Число просмотров 5, логических чтений 5, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "colors". Число просмотров 1, логических чтений 1, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.

(затронута одна строка)

Время работы SQL Server:
Время ЦП = 0 мс, затраченное время = 0 мс.

Время выполнения: 2020-10-06T10:33:58.3635984+03:00

...
Рейтинг: 0 / 0
SQL-запрос, который выбирает все строки и все столбцы из условной таблицы содержит максима
    #40005644
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НеофитSQL,
в данной задаче, основная проблема с неизвестной структурой таблицы colors, все столбцы которой надо вывести.
иначе, было бы проще и лучше так: просто перечислить их в разделе group by
пример:
Код: sql
1.
2.
3.
4.
 select c.color_id, c.color, max(p.price) as max_price
	from colors c left join  phone_price p on c.color_id=p.color_id
 group by c.color_id, c.color
 order by 3
...
Рейтинг: 0 / 0
SQL-запрос, который выбирает все строки и все столбцы из условной таблицы содержит максима
    #40005864
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чует мое сердце преподаватель хотел увидеть скалярный подзапрос.
...
Рейтинг: 0 / 0
SQL-запрос, который выбирает все строки и все столбцы из условной таблицы содержит максима
    #40005934
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
godsql,

Большое спасибо, с интересом прочитал ваш анализ.
Интуитивно я "надеялся" что джойн на груп будет эффективнее, т.к. пока не научился читать планы Оракла, с которым начинаю работать, а скромный опыт еще не позволяет мне оценивать относительную стоимость разных табличных операций.

Например, я с удивлением обнаружил месяц назад что Оракл оценивает поиск числа в индексированном столбце дороже, чем вызов интерпретированной пользовательской функции со сменой контекста. По крайней мере, это было мое умозаключение.

Если вам интересно: Потрогать пустой result set
...
Рейтинг: 0 / 0
SQL-запрос, который выбирает все строки и все столбцы из условной таблицы содержит максима
    #40005961
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SERG1257
Чует мое сердце преподаватель хотел увидеть скалярный подзапрос.

х.з.
Вариантов слишком много: тут м.б. и cross apply и коррелированные подзапросы в разных местах и сте
OVER() прикольней тем, что можно использовать аггрегирующие функции, где их использовать не дают. Хотя и дорогой ценой.
...
Рейтинг: 0 / 0
SQL-запрос, который выбирает все строки и все столбцы из условной таблицы содержит максима
    #40005963
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НеофитSQL,

мне самому было интересно. Я знал, что max() over() сработает, но не знал насколько все плохо будет. Просто так никто не делает.

Посмотрел вашу тему. К сожалению, я не сталкивался с Ораклом, поэтому оценить не могу.
...
Рейтинг: 0 / 0
SQL-запрос, который выбирает все строки и все столбцы из условной таблицы содержит максима
    #40005964
Aforizm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
godsql,
Спасибо. вариант
с
посмотрите в сторону MAX(price) OVER(partition by color_id)

подошёл. Спасибо
...
Рейтинг: 0 / 0
SQL-запрос, который выбирает все строки и все столбцы из условной таблицы содержит максима
    #40005966
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aforizm
godsql,
Спасибо. вариант
с
посмотрите в сторону MAX(price) OVER(partition by color_id)

подошёл. Спасибо
покажи весь запрос
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL-запрос, который выбирает все строки и все столбцы из условной таблицы содержит максима
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]