выбрать только одно имя из нескольких / многих имен - PullRequest
0 голосов
/ 30 ноября 2018

Я хочу выбрать только одно имя из таблицы, где человек (имя) больше всего раз в таблице.

таблица выглядит так (import_rec ix_k):

product_name     product_id     man_name
  product1           1        mame1|''|last_name1|''|ID
  product2           2        name1|''|last_name1|''|ID
  product3           3        name2|''|last_name2|''|ID
  product4           4        name1|''|last_name1|''|ID
  product5           5        name1|''|last_name1|''|ID
  product6           6        name3|''|last_name3|''|ID

РЕДАКТИРОВАТЬ: , поэтому я хочу выбрать только name1-last_name1 из таблицы

мой запрос:

select u.name||' '||u.last_name from X_USERS u, items x, import_rec ix_k 
where u.id = x.id_man and x.id = ix_k.code_id and 
"actual_table".rid = ix_k.rid_o and rownum = 1

Как я могу выбратьимя и фамилия, которые больше всего в таблице?

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

То, что вы можете сделать, это использовать Общее табличное выражение и ROW_NUMBER .Вы позволяете функции rownumber подсчитывать количество дубликатов [man_name] и упорядочиваете таблицу по rownumber в порядке убывания, поэтому наибольшее количество будет первым в таблице.Затем вы выбираете первую строку в своей упорядоченной таблице, содержащей столбец с номером строки.Это будет выглядеть примерно так:

WITH CTE AS(
SELECT ROW_NUMBER() OVER(PARTITION BY man_name ORDER BY Product_id) AS rn
, product_name
, product_id
, man_name
FROM (yourtable/s)
)
SELECT TOP 1  
  rn 
, product_name
, product_id
, man_name
FROM CTE 
ORDER BY rn DESC 
0 голосов
/ 30 ноября 2018

Вы хотите

только одно имя из таблицы, где человек (имя) больше всего раз в таблице

Если вы используете 12c и выше, выможет использовать:

select * FROM t  
   ORDER BY COUNT(*) OVER ( PARTITION BY man_name ) 
DESC FETCH FIRST 1 ROWS ONLY;

Для более старых версий вы можете использовать ROWNUM с подзапросом.

select * FROM
( select * FROM t  
     ORDER BY COUNT(*) OVER ( PARTITION BY MAN_NAME ) 
DESC ) WHERE rownum = 1;
...