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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2016, 16:14   #1
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию [sql]Distinct по одному полю из группы полей

Доброе время суток форумчане
Вот такая загвоздка,
Есть например таблица
Код:
Id       English_word  Count_Repeat
3096	 arranged	    7
3240 	 arranged	    4
3241	 arranged	    5
3087 	 almost	            3
3252	 arranged	    6
4322	 almost	            2
Мне нужно сделать ‘distinct’ по полю ‘English_word’ (выбрать уникальные слова), но таким образом, чтобы в результате запроса, я имел два поля (English_word, Count_Repeat), т.е. результат запроса приносил 2 строки, в котором значение Count_Repeat роли не играет.
Запрос:
Код:
select distinct English_word,  Count_Repeat from MAIN_TABLE where Count_Repeat > 0 order by Count_Repeat
этого не сделает.

Можно наверное это решить с помощью подзапроса, distinct, group by?

Спасибо

Последний раз редактировалось KBO; 09.01.2016 в 16:17.
KBO вне форума Ответить с цитированием
Старый 09.01.2016, 16:23   #2
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Код:
select English_word,  max(Count_Repeat)
from MAIN_TABLE where Count_Repeat > 0
group by English_word
come-on вне форума Ответить с цитированием
Старый 09.01.2016, 16:49   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

distinct - уникальность по всем выбранным полям, а не по какому-то отдельному
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.01.2016, 18:25   #4
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Спасибо получилось.
Еще один вопросик по производительности, если можно.
Я тут этот запрос немного переделал, чтоб он вычитал единицу с поля "Count_Repeat"

Код:
update MAIN_TABLE set Count_Repeat = Count_Repeat-1 where ID in
(select ID from
 (select max(ID) as ID, English_word, Russian_word, max(Count_Repeat) as Count_Repeat from MAIN_TABLE
  where Count_Repeat > 0
    group by English_word, Russian_word order by Count_Repeat))
и у меня получается:
первый (свеху) select выполняется - "Execute time = 0ms", а
весь запрос (update) выполняется - "Execute time = 3s 812ms" - обновить 2 записи
это нормально?

Последний раз редактировалось KBO; 09.01.2016 в 18:28.
KBO вне форума Ответить с цитированием
Старый 09.01.2016, 19:08   #5
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

вы смеетесь? 4 сек на 2 записи, вечность
тут у вас вообще не понятно что за такое, зачем order by, зачем 2 селекта, и т.д.
come-on вне форума Ответить с цитированием
Старый 09.01.2016, 20:24   #6
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Та я и сам вижу, какие-то странные интервалы
Цитата:
Сообщение от come-on Посмотреть сообщение
вы смеетесь? 4 сек на 2 записи, вечность
тут у вас вообще не понятно что за такое, зачем 2 селекта, и т.д.
У меня вообще задача стояла так:
- выбрать те 2 записи, которые вы помогли мне выбрать
- у каждой из этих выбранных записей, вычесть единицу с каждого значения в Count_Repeat

Цитата:
Сообщение от come-on Посмотреть сообщение
... зачем order by, и т.д.
дело в том, что я эту выборку вывожу в MSWord, и значения там, где Count_Repeat > 0, у меня должны попадать вконец сделанной выборки, а значит и в конец документа MSWord

Последний раз редактировалось KBO; 09.01.2016 в 20:45.
KBO вне форума Ответить с цитированием
Старый 09.01.2016, 21:18   #7
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Во первых запрос на выборку не выбирае записи, и не выбирал никогда. Это только набор данных. А с учетом вашего вопроса совсем не понятно что надо.
Во вторых при чем тут запрос на обновление и какойто ворд?
вощем ясности стало еще меньше
come-on вне форума Ответить с цитированием
Старый 09.01.2016, 22:41   #8
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

У меня есть таблица MAIN_TABLE, с данными (как в сообщении #1), мне нужно получить данные, которые были получены с помощью запроса (сообщение #2).
В полученном наборе данных, значения в поле Count_Repeat (всех строк выборки), нужно уменьшить на единицу (записав это значение в поле Count_Repeat).

Значения в полученной выборке, отсортировать по полю Count_Repeat.
KBO вне форума Ответить с цитированием
Старый 10.01.2016, 17:22   #9
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

приношу извенения, в запросе обновлялись наверное не две записи, просто нужно было поставить дополнительное условие "REPEAT_ONE > 0"

Код:
update MAIN_TABLE set REPEAT_ONE = REPEAT_ONE-1 where ID in
(select ID from(select EW1, RW1, KN_N_KN, max(REPEAT_ONE) as REPEAT_ONE, max(ID) as ID from MAIN_TABLE
                       where KN_N_KN = 2 and (EW1<>'' and RW1<>'') or REPEAT_ONE > 0
                       group by EW1, RW1, KN_N_KN order by REPEAT_ONE))
                       and REPEAT_ONE > 0
и у меня получилось:
Код:
5 record(s) was(were) updated in MAIN_TABLE

------ Performance info ------
Prepare time = 0ms
Execute time = 16ms
Current memory = 9*819*176
Max memory = 9*856*216
Memory buffers = 2*048
Reads from disk to cache = 0
Writes from cache to disk = 1
Fetches from cache = 18*626
KBO вне форума Ответить с цитированием
Старый 10.01.2016, 18:12   #10
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

зачем order by, зачем 2 селекта, и т.д.
come-on вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фильтрация по одному полю Sh_ann БД в Delphi 3 25.04.2013 10:35
Получить числа, взятые по одному из каждой группы равных членов. fits Паскаль, Turbo Pascal, PascalABC.NET 0 13.12.2012 21:03
Заполнение полей подчиненной формы по полю с выпадающим списком в главной форме Lum Microsoft Office Access 3 03.05.2012 23:17
Top 5 по одному полю, где несколько условий d_adilet Microsoft Office Access 4 10.12.2011 09:45
Работает ли при "SQL dialect 3" оператор DISTINCT? 3lander БД в Delphi 1 12.10.2007 00:21