Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Вывод уникальных значений с условием максимума по длине второго поля :(

Коллеги , прошу помочь - второй день ломаю голову ... (опыт есть но небольшой)

Есть простенькая таблица товаров ( Nr , Name ). Nr может повторятся. Name для одинаковых номеров может быть разной (и пустой).
Как вывести записи с уникальными значения Nr , но с максимальным по длине Name (Если записей с одинаковым максимум несколько можно брать любую)

MS SQL 2012
Ответ:
aleks2
Что за бред?
SELECT Nr, max(Name) as Name
  from
(
	SELECT 1 AS Nr, 'A' AS Name  UNION ALL 
	SELECT 1 AS Nr, 'AA' AS Name  UNION ALL 
	SELECT 1 AS Nr, 'AAA' AS Name  UNION ALL 
	SELECT 2 AS Nr, 'B' AS Name  UNION ALL 
	SELECT 2 AS Nr, 'BA' AS Name  UNION ALL 
	SELECT 2 AS Nr, 'BAA' AS Name  
) A
group by Nr



urfin2016
уникальными значения Nr , но с максимальным по длине Name
Вопрос: Нахождение уникальных значений из таблицы по нескольким условиям

Добрый день, задался вопросом о нахождение уникальных значений из таблицы по нескольким условиям.

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

IDpar1par2
id1aabb
id1aabb
id1aanull
id1nullbb
id1nullnull
id2aanull
id2nullbb
.........

Итоговый select должен содержать по одному уникальному идентификатору с параметрами, которые должны удовлетворять следующим условиям:
1. Если заполнены оба параметра, то выбирается par1 = aa, par2 = bb,
2. Если заполнен первый параметр, то выбирается par1= aa, par2 = null
3. Если заполнен второй параметр, то выбирается par1=null, par2 = bb
4. Если оба параметры не заполнены, то выбирается par1 = null, par2 = null.

В примере из таблицы, параметры для идентификатора id1 удовлетворяют первому условию, а параметры для идентификатора id2 второму.
Итог должен получиться таким:
id1,aa,bb
id2,aa,null

Заранее спасибо!
Ответ: YuryK, invm, Вероятно, я неправильно выразился. С CTE не сталкивался в принципе, информация по первым ссылкам в гугле навела на мысль о рекурсии.
Тема поста связана с решением составной части задачи.
Изначально есть три таблицы с различными данными, в каждой имеется идентификатор ID. В двух таблицах содержатся дубли, которые чистятся с помощью предложенных Вами запросов.

Задача состоит в том, чтобы отразить статистику в одном запросе с помощью группировки параметров по объединенной таблице, которая содержит только уникальные записи ID.
Вопрос: Обратная сортировка с уникальными значениями

Здравствуйте. Нужна помощь.
Есть таблица: smf_messages
id_topic ......... poster_time
.... 1 ............. 1501966868
.... 1 ............. 1501966869
.... 2 ............. 1501966870
.... 3 ............. 1501966871
.... 2 ............. 1501966872
.... 1 ............. 1501966873
.... 4 ............. 1501966874


Нужно создать запрос mysql, что бы происходила сортировка поля poster_time (время) по убыванию а поле id_topic что бы не повторялось, то есть выбрать уникальные значения.

То есть должно получиться следующее:

id_topic ....................... poster_time
..... 4 .......................... 1501966874
..... 1 .......................... 1501966873
..... 2 .......................... 1501966872
..... 3 .......................... 1501966871
Ответ:
Это алиас для таблицы подзапроса. И процитирован неправильный метод, используйте второй с использованием аггрегатной max.
Первый не будет работать ни во внятных СУБД ни в самом MySQL версии начиная с 5.7 без специальных правок sql_mode. И возможно вообще не будет в следующих релизах. Давно не читал relnotes к 8, что там уже выкидывают, а что пока только deprecated.


-----
PostgreSQL DBA
Вопрос: Нарастающий итог уникальных значений.

Добрый день.

Подскажите, как можно подсчитать уникальные значения нарастающим итогом? Не могу совсем правильно сформулировать вопрос, покажу на примере:

Таблица вида:
WeekClient
1a
1b
1c
2f
2a
3q
3y
3c


В результате хочу (но не могу) получить
WeekResult
13
24
36


Тоесть за первую неделю мы имеем 3 уникальных клиента, за первую и вторую недели - 4 уникальных клиента, за первую, вторую, третью недели мы имеем 6 уникальных клиентов.

Буду благодарен залюбой совет или пример.
Ответ: a_voronin,

Я видел эту темку, но не смог применить к своей задачеке...
Вопрос: Получение уникальных значений поля (GROUP BY) и min/max значений других полей

Доброго времени суток.

Есть таблица из 4 полей:
Код SQL
1
id | article | price | enabled
id - уникальный AI, остальные - обычные неуникальные поля. enabled может быть 0 или 1.

Допустим, есть несколько записей:
Код SQL
1
2
3
4
1 | art1 | 500 | 1
2 | art1 | 700 | 1
3 | art2 | 500 | 0
4 | art2 | 700 | 1
Необходимо получить:
1. Все уникальные значения поля article.
2. Для каждого поля article получить минимальный price максимального enabled. Т.е. результат должен быть такой:

article price enabled
art1 500 1
art2 700 1

Т.е.:
1. Берём артикул, ищем среди его записей максимальный enabled.
2. Среди записей с таким enabled ищем минимальный price.

Сижу около 3 часов, пробую разные запросы, но никак не могу составить ничего адекватного. Пока что написал запрос для одного заранее известного артикула:
Код SQL
1
2
3
SELECT *, (SELECT `price` FROM `test` WHERE `article` = 'art1' ORDER BY `enabled` DESC, `price` LIMIT 1) AS 'max_price'
    FROM `test` WHERE `article` = 'art1'
        GROUP BY `article`
Но по задаче нужно получить не один, а все артикулы, и подставлять в оба WHERE все уникальные артикулы, я так понимаю, нет возможности.

Подскажите, в какую сторону копать. Благодарю.
Ответ: ApXyC, офигеть, оно работает! Огромная благодарность.

Чуть дописал, вот итоговый запрос:
Код SQL
1
2
3
4
5
6
7
8
SELECT main.article, MIN(main.price) AS 'price', MAX(main.enabled) AS 'enabled'
FROM test main
JOIN (
    SELECT article, MAX(enabled) AS maxenabled
    FROM test
    GROUP BY article
    ) nested ON main.article = nested.article AND main.enabled = nested.maxenabled
GROUP BY main.article
Вопрос: Подсчет количества записей, учитывая уникальные значения.

FB 2.5.

Значимое содержимое таблицы выглядит так:
NUM  NM
02 Стар1
03 null
04 Лара
04 Лагр
05 Снежка
05 Стар2
06 null

Задача в посчете количества уникальных номеров (колонка NUM) по условию занятности номера:
select count(ID) from Tbl where NM is not null

Такой запрос возвращает значение 5, не учитывая уникальность значений в колонке NUM.
Подскажите, пожалуйста, как препарировать этот запрос, чтобы в подсчете участвовали только уникальные значения.
По приведенным данным результат должен быть равным 3.
Ответ: Добрый Э - Эх, спасибо. Забылась эта простая фича.
Вопрос: Выборка уникальных значений из двух полей, где содержатся id

Здравствуйте!
Подскажите пожалуйста, как выбрать уникальные значения из двух полей, где могут содержаться одинаковые id?
Есть таблица сообщений, где есть id сообщения, from_id и to_id.
Необходимо получить пять уникальных значений по двум полям from_id и to_id, где from_id=мой id (т.е. пишу я) и to_id=мой id (где пишут мне), и где id отсортировано по убыванию (от большего к меньшему).
Нужен конкретный запрос.
Ответ: tanglir, благодарю вас за помощь. голова!
Вопрос: Поиск уникальных значений в столбце

Мне необходимо в таблице, в колонке "жир", вытащить количество уникальных значений. Этот пример из книги SQL для чайников, но там не работает. По условиям должно выходить число 5

Они пишут:
SELECT COUNT (DISTINCT Жир)
From Продукты ;

Но нифига не работает. DISTINCT вообще ни под каким соусом не подходит. Что я делаю не так? Как мне добиться получение суммы уникальных значений в столбце?
Ответ:
Сообщение от corbis
Вроде как наоборот ТС просил:
Именно так.

Но все, я почти понял, но главное что все работает
Вопрос: Ускорить подсчет уникальных значений

Есть длинная таблица с колонкой, в которой сравнительно мало уникальных значений.
По этой колонке есть индекс.
Нужно получить количество уникальных значений.
Объясните, пожалуйста, почему оракл делает фулскан, разве индекс не проще было бы использовать?
+
SQL>create table t1 as select trunc(ora_hash(level)/1000000) a, rpad('-', 1000, '-') b, rpad('-', 1000, '-') c, rpad('-', 1000, '-') d, rpad('-', 1000, '-') e, rpad('-', 1000, '-') f from dual connect by level <= 1000000;

Table created.

SQL>create index i1 on t1(a);

Index created.

SQL>call dbms_stats.gather_table_stats(ownname=>'', tabname=>'T1');

Call completed.

SQL>select * from (select a, count(1) c from t1 group by a order by 2 desc) where rownum < 20;
A C
---------- ----------
1964 299
382 287
2332 285
803 284
816 283
1633 282
550 281
960 281
4149 280
2572 280
3493 279
2189 278
145 277
1725 276
153 275
949 275
2987 274
3087 274
3264 273

19 rows selected.

SQL>select min(c), max(c) from (select count(1) c from t1 group by a);
MIN(C) MAX(C)
---------- ----------
179 299

SQL>select count(distinct a) from t1;
COUNT(DISTINCTA)
----------------
4295

SQL>explain plan for select count(distinct a) from t1;

Explained.

SQL>select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 405047221

---------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 13 | 271K (1)| 00:54:22 |
| 1 | SORT AGGREGATE | | 1 | 13 | | |
| 2 | VIEW | VW_DAG_0 | 4295 | 55835 | 271K (1)| 00:54:22 |
| 3 | HASH GROUP BY | | 4295 | 17180 | 271K (1)| 00:54:22 |
| 4 | TABLE ACCESS FULL| T1 | 1000K| 3906K| 271K (1)| 00:54:21 |
---------------------------------------------------------------------------------

11 rows selected.

Ответ:
Elic
nullable
прошу прощения, упустил из виду
Вопрос: Как сгенерировать гарантированно уникальное значение на основе содержимого 2 полей?

Добрый день.
Подскажите, пожалуйста, как сгенерировать гарантированно уникальное значение на основе содержимого 2 полей(varchar2(255) и number(содержит уникальные значения от 1 до 17))?
ora_hash не использую дабы не получить в дальнейшем проблемы с дублями.
Ответ: Всем большое спасибо за ответы, мужики!