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

Откуда:
Сообщений: 51
У меня есть таблица с двумя полями.
Название цена
Товар 1 красный 500
Товар 1 зеленый 499
Товар 2 красный 600
Товар 2 зеленый 599

Мне нужно выбрать товары с минимальной ценой из каждой группы. Т.е. получить следующую выборку:

Товар 1 зеленый 499
Товар 2 зеленый 599

Как это сделать?
28 сен 09, 18:05    [7716965]     Ответить | Цитировать Сообщить модератору
 Re: группировка с фильтром  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
select товар, MIN(цена) from table
group by товар
?
-------------------------------------
Jedem Das Seine
28 сен 09, 18:09    [7716980]     Ответить | Цитировать Сообщить модератору
 Re: группировка с фильтром  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
А как вы узнали, что
Товар 1 красный
и
Товар 1 зеленый
принадлежат одной "группе" ?
28 сен 09, 18:11    [7716989]     Ответить | Цитировать Сообщить модератору
 Re: группировка с фильтром  [new]
Mr. Anderson
Member

Откуда:
Сообщений: 51
Тут вся проблема в том, что товар 1 зеленый - это одно поле, а не два.
28 сен 09, 18:11    [7716992]     Ответить | Цитировать Сообщить модератору
 Re: группировка с фильтром  [new]
Mr. Anderson
Member

Откуда:
Сообщений: 51
Паганель,

потому, что нужно сгруппировать как 'товар 1'
28 сен 09, 18:12    [7717000]     Ответить | Цитировать Сообщить модератору
 Re: группировка с фильтром  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Mr. Anderson
потому, что нужно сгруппировать как 'товар 1'
Алгоритм определения,
принадлежат ли два разных товара одной группе
на русском языке по шагам напишите, пожалуйста
28 сен 09, 18:14    [7717014]     Ответить | Цитировать Сообщить модератору
 Re: группировка с фильтром  [new]
O_val
Member

Откуда:
Сообщений: 157
Паганель
Mr. Anderson
потому, что нужно сгруппировать как 'товар 1'
Алгоритм определения,
принадлежат ли два разных товара одной группе
на русском языке по шагам напишите, пожалуйста


Он хочет группировать по части Наименования
28 сен 09, 18:17    [7717022]     Ответить | Цитировать Сообщить модератору
 Re: группировка с фильтром  [new]
Mr. Anderson
Member

Откуда:
Сообщений: 51
Паганель,

все что товар 1 - это одна група, а все, что товар 2 - это вторая группа товара.

Мне нужно сначала из группы товаров 1 выбрать товар с минимальной ценой, а потом тоже самое сделать во второй группе, а потом вывести, что в группе товаров 1 минимальная цена Х, а в группе 2, минимальная цена Y.
28 сен 09, 18:18    [7717031]     Ответить | Цитировать Сообщить модератору
 Re: группировка с фильтром  [new]
Mr. Anderson
Member

Откуда:
Сообщений: 51
O_val
Паганель
Mr. Anderson
потому, что нужно сгруппировать как 'товар 1'
Алгоритм определения,
принадлежат ли два разных товара одной группе
на русском языке по шагам напишите, пожалуйста


Он хочет группировать по части Наименования


Да, именно!
28 сен 09, 18:19    [7717035]     Ответить | Цитировать Сообщить модератору
 Re: группировка с фильтром  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Mr. Anderson
все что товар 1 - это одна група, а все, что товар 2 - это вторая группа товара
А если будет 10 товаров?
Как отличить "Товар 1" и "Товар 10" ?

Я просил алгоритм по-русски, по шагам...
28 сен 09, 18:20    [7717040]     Ответить | Цитировать Сообщить модератору
 Re: группировка с фильтром  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Maxx,от дятел не дочиталь условие ) сорри, присоеденяюсь к Паганелю... по шагам
28 сен 09, 18:22    [7717049]     Ответить | Цитировать Сообщить модератору
 Re: группировка с фильтром  [new]
O_val
Member

Откуда:
Сообщений: 157
Mr. Anderson
Да, именно!


Нормализация нужна.
Красный, зеленый, серо-буро-малиновый убирайте.
28 сен 09, 18:26    [7717063]     Ответить | Цитировать Сообщить модератору
 Re: группировка с фильтром  [new]
Mr. Anderson
Member

Откуда:
Сообщений: 51
Паганель
Mr. Anderson
все что товар 1 - это одна група, а все, что товар 2 - это вторая группа товара
А если будет 10 товаров?
Как отличить "Товар 1" и "Товар 10" ?

Я просил алгоритм по-русски, по шагам...


Только по наличию слова Товар 1 или Товар 10 в поле с наименованием.
28 сен 09, 18:39    [7717102]     Ответить | Цитировать Сообщить модератору
 Re: группировка с фильтром  [new]
Mr. Anderson
Member

Откуда:
Сообщений: 51
O_val
Mr. Anderson
Да, именно!


Нормализация нужна.
Красный, зеленый, серо-буро-малиновый убирайте.


Я бы с радостью, но не могу. База не моя.
28 сен 09, 18:39    [7717103]     Ответить | Цитировать Сообщить модератору
 Re: группировка с фильтром  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Mr. Anderson
Только по наличию слова Товар 1 или Товар 10 в поле с наименованием.
В строке "Товар 10" как раз и есть наличие строки "Товар 1"
Ваш алгоритм неверен
28 сен 09, 18:42    [7717113]     Ответить | Цитировать Сообщить модератору
 Re: группировка с фильтром  [new]
Mr. Anderson
Member

Откуда:
Сообщений: 51
Паганель
Mr. Anderson
Только по наличию слова Товар 1 или Товар 10 в поле с наименованием.
В строке "Товар 10" как раз и есть наличие строки "Товар 1"
Ваш алгоритм неверен


Это в примере. На практике там более сложные названия, которых довольно мало и они не повторяются.
28 сен 09, 18:48    [7717127]     Ответить | Цитировать Сообщить модератору
 Re: группировка с фильтром  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Mr. Anderson
Это в примере. На практике там более сложные названия, которых довольно мало и они не повторяются.
А что, 10 - это уже много?
И разве "Товар 1" и "Товар 10" как-то повторяют друг друга?
28 сен 09, 18:51    [7717136]     Ответить | Цитировать Сообщить модератору
 Re: группировка с фильтром  [new]
Mr. Anderson
Member

Откуда:
Сообщений: 51
Паганель
Mr. Anderson
Это в примере. На практике там более сложные названия, которых довольно мало и они не повторяются.
А что, 10 - это уже много?
И разве "Товар 1" и "Товар 10" как-то повторяют друг друга?


Скажите, Вы знаете решение или просто так придираетесь к словам? Если Вам будет проще, то там 9 наименований товаров типа "ручка", "карандаш", "маркер". И забегая вперед сразу скажу, что названия типа "карандаш-маркер" там нет.
28 сен 09, 19:38    [7717260]     Ответить | Цитировать Сообщить модератору
 Re: группировка с фильтром  [new]
Ozzy-Osbourne
Member

Откуда: Balashikha
Сообщений: 139
Mr. Anderson
На практике там более сложные названия, которых довольно мало и они не повторяются.
Если в названиях СТРОГО три слова, разделенных пробелом (первые два - это префикс "Товар" и его "артикул"(?), третье - "атрибут" типа цвет и т.п.), то попробуйте так:
declare @t table(strange_article_name varchar(50), article_price int)
insert into @t 
select 'Товар 1 красный',500 union all
select 'Товар 1 зеленый',499 union all
select 'Товар 1 голубовато-розоватый',499 union all
select 'Товар 2 серобуромалиновый',600 union all
select 'Товар 2 красный',600 union all
select 'Товар 2 зеленый',599 union all
select 'Товар 2 иссиня-чёрный',593 union all
select 'Товар 2 грязно-лилово-рыжий',598 union all
select 'Товар 3 улётно-белый',200 union all
select 'Товар 3 жёлто-белый',220 union all
select 'Товар 3 улётно-синий',200 union all
select 'Товар 3 гламурно-блёклый',200

select strange_art_group=left(strange_article_name,L-space_last_index)
      ,strange_min_name=substring(min(right(cast(1000000000+article_price as varchar),9)+right(strange_article_name,space_last_index-1)),10,50)
      ,strange_min_price=cast(left(min(right(cast(1000000000+article_price as varchar),9)+right(strange_article_name,space_last_index-1)),9)as int)
from(
select strange_article_name
      ,space_last_index=charindex(' ',reverse(strange_article_name))
      ,L=len(strange_article_name)
      ,article_price
from @t
)t
group by left(strange_article_name,L-space_last_index)
(предполагается, что цена товара не больше 2^31-1 :-))

Странность Вы сможете увидеть сразу же:
strange_art_groupstrange_min_namestrange_min_price
Товар 1голубовато-розоватый499
Товар 2иссиня-чёрный593
Товар 3гламурно-блёклый200


-- в первой и третьей группах есть несколько товаров с ОДИНАКОВОЙ ценой, которая в то же время минимальна. Этот запрос отберёт среди них "САМЫЙ МИНИМАЛЬНЫЙ" - т.е. первый по алфавиту в пределах тех, у которых самая наименьшая по группе цена.

Не уверен, что именно _это_ Вам нужно на самом деле, т.к. в исходном сообщении нет разъяснений на этот счет. Поэтому - вот вариант, в котором выводятся _ВСЕ_ товары с одной и той же наименьшей ценой по группе:
select top 1 with ties
       strange_art_group=left(strange_article_name,L-space_last_index)
      ,strange_min_name=right(strange_article_name,space_last_index-1)
      ,strange_article_price
from(
select strange_article_name,space_last_index=charindex(' ',reverse(strange_article_name)),L=len(strange_article_name),strange_article_price
from @t
)t
order by 
case when 1=dense_rank()over(partition by left(strange_article_name,L-space_last_index) order by strange_article_price) then 1 else 2 end
strange_art_groupstrange_min_namestrange_article_price
Товар 2иссиня-чёрный593
Товар 3улётно-белый200
Товар 3улётно-синий200
Товар 3гламурно-блёклый200
Товар 1зеленый499
Товар 1голубовато-розоватый499
28 сен 09, 19:46    [7717278]     Ответить | Цитировать Сообщить модератору
 Re: группировка с фильтром  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Mr. Anderson
Скажите, Вы знаете решение или просто так придираетесь к словам?
Ну знаю какое-то решение
declare @t table(name varchar(20), price int)
insert into @t(name, price)
select 'карандаш красный', 500 union all
select 'карандаш зеленый', 499 union all
select 'маркер красный', 600 union all
select 'маркер зеленый', 599

select part, min(price)
  from (select case when name like '% %'
                    then left(name, charindex(' ', name))
                    else name
                end as part
              ,price
          from @t) as t
 group by part

part                 
-------------------- -----------
карандаш             499
маркер               599

(2 row(s) affected)
но не факт что это решение именно Вашей задачи
Потому что Вашу задачу я так и не понял
28 сен 09, 19:57    [7717300]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить