Если я правильно понимаю, вам нужны оконные функции:
SELECT column1, column2, column3,
SUM(COUNT(*)) OVER (PARTITION BY column2) as column2_cnt
FROM table_name 2
GROUP BY column1, column2, column3;
В каждой строке у вас будет количество column2
значений по всей таблице . Таким образом, значения будут повторяться в строках с одинаковым значением column2
.
РЕДАКТИРОВАТЬ:
Исходя из вашего пересмотренного вопроса, вы, кажется, хотите:
SELECT name, mode, date,
COUNT(*) OVER (PARTITION BY name) as cnt
FROM table_name
GROUP BY name, mode, date;
Вы можете выразить это другими способами:
SELECT t.name, t.mode, t.date, tn.cnt
FROM table_name t JOIN
(SELECT name, COUNT(DISTINCT mode, date) as cnt
FROM table_name t
GROUP BY name
) tn
ON t.name = tn.name
GROUP BY t.name, t.mode, t.date, tn.cnt;