Выбор частоты результата, который может отображаться в нескольких столбцах (SQL) - PullRequest
3 голосов
/ 29 января 2012

У меня есть таблица со списком имен, распределенных по пяти различным столбцам.Я пытаюсь получить 6 самых частых названий.Каждое имя появится в каждой записи только один раз.Пять столбцов: имя_1, имя_2 ... имя_5.И только ради имен, назовите таблицу «mytable».

Любая помощь будет высоко ценится.

Ответы [ 4 ]

3 голосов
/ 29 января 2012

Вот один из подходов:

SELECT name, COUNT(1)
  FROM (           SELECT name_1 AS name FROM mytable
         UNION ALL SELECT name_2 AS name FROM mytable
         UNION ALL SELECT name_3 AS name FROM mytable
         UNION ALL SELECT name_4 AS name FROM mytable
         UNION ALL SELECT name_5 AS name FROM mytable
       ) AS myunion
 GROUP BY name
 ORDER BY COUNT(1) DESC LIMIT 6
;

Сколько строк в таблице?

1 голос
/ 29 января 2012

попробуйте это:

SELECT iTable.iName, Count(iTable.iName) as TotalCount
FROM
(
    SELECT DISTINCT name_1 as iName FROM myTable
        UNION
    SELECT DISTINCT name_2 as iName FROM myTable
        UNION
    SELECT DISTINCT name_3 as iName FROM myTable
        UNION
    SELECT DISTINCT name_4 as iName FROM myTable
        UNION
    SELECT DISTINCT name_5 as iName FROM myTable
) as iTable
GROUP BY iTable.iName
ORDER BY TotalCount DESC
LIMIT 6
0 голосов
/ 29 января 2012

UNION + подвыбор должен работать для вас в этом случае.

SELECT name_1, COUNT(*) FROM (
    SELECT name_1 FROM mytable
    UNION ALL SELECT name_2 FROM mytable
    UNION ALL SELECT name_3 FROM mytable
    UNION ALL SELECT name_4 FROM mytable
    UNION ALL SELECT name_5 FROM mytable
) AS names GROUP BY name_1 ORDER BY 2 DESC LIMIT 6;
0 голосов
/ 29 января 2012

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

select * 
from 
(
  select name, count(*)
  from (
    select name from table1
    union all
    select name from table2
    union all 
    select name from table3
    union all
    select name from table4
    union all
    select name from table5
  )
  group by name 
  order by count(*) desc   
)
where rownum <= 6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...