использование подзапроса в предложении select внешнего запроса с группировкой по - PullRequest
0 голосов
/ 06 марта 2020

Допустим, у меня есть две колонны 'col1' и 'col2'. Отношение много ко многим. Пусть col2 имеет три вида значений: «A», «B» и «C». Теперь я выполняю группирование по столбцу «col1». И я хочу получить максимальное количество значений A, B, C для col2 для каждой строки в столбце «col». 1

Т.е.

Col1 | col2
--------------------
1.      | A
--------------------
1.      | A
--------------------
1.      | B
--------------------
2.      | C

RESULT

COL1| COL2
--------------------
1.       | A
--------------------
2.       |C

Я пытался написать группу подзапросом внутри предложения select внешнего запроса, но я думаю, что он не поддерживает. Не понимаю.

Ответы [ 3 ]

0 голосов
/ 06 марта 2020

Похоже, вам нужен «режим» - наиболее распространенное значение для col2 для каждого col1. Вы можете использовать оконные функции:

select col2 as col2_mode, count(*)
from (select col1, col2, count(*) as cnt,
             row_number() over (partition by col1 order by count(*)) as seqnum
      from t
     ) t
where seqnum = 1
group by col2;

Если есть связи для наиболее распространенных, это произвольно выбирает одну из них. Если вы хотите все из них, используйте rank() вместо row_number().

0 голосов
/ 06 марта 2020

С ROW_NUMBER() оконной функцией:

select col1, col2
from (
  select col1, col2,
    row_number() over (partition by col1 order by count(*) desc)  rn
  from tablename
  group by col1, col2
)
where rn = 1

Если вы хотите, чтобы связи включались в результаты, используйте DENSE_RANK() вместо ROW_NUMBER(). Смотрите демо . Результаты:

| col1 | col2 |
| ---- | ---- |
| 1    | A    |
| 2    | C    |
0 голосов
/ 06 марта 2020

Попробуйте использовать Temp Table и Top 1

SELECT [col2],COUNT(col1) AS mycount into #TMPA FROM [TESTDB].[dbo].[tbltest] GROUP BY col1,col2 select top 1 * from #TMPA GROUP BY col2,mycount drop table #TMPA

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