У меня есть таблица ниже, и я хочу подсчитать количество последовательных вхождений каждой буквы. Код для воспроизведения таблицы, которую я использую, указан для тех, кто помогает сэкономить время.
CREATE TABLE table1 (id integer, names varchar(50));
INSERT INTO table1 VALUES (1,'A');
INSERT INTO table1 VALUES (2,'A');
INSERT INTO table1 VALUES (3,'B');
INSERT INTO table1 VALUES (4,'B');
INSERT INTO table1 VALUES (5,'B');
INSERT INTO table1 VALUES (6,'B');
INSERT INTO table1 VALUES (7,'C');
INSERT INTO table1 VALUES (8,'B');
INSERT INTO table1 VALUES (9,'B');
select * from table1;
Я нашел код, уже написанный для этого в Интернете, который я протестировал и могу подтвердить, что он успешно работает. Это показано здесь.
select names, count(*) as count
from (select id, names, (row_number() over (order by id) - row_number() over (partition by names order by id)) as grp
from table1
) as temp
group by grp, names
Я пытаюсь добавить в конце предложение ORDER BY, например:
select names, count(*) as count
from (select id, names, (row_number() over (order by id) - row_number() over (partition by names order by id)) as grp
from table1
) as temp
group by grp, names
order by id -- added this here, but it creates an error.
но продолжал получать сообщение об ошибке «Столбец temp.id» недопустимо в предложении ORDER BY, потому что оно не содержится ни в статистической функции, ни в предложении GROUP BY. " Впрочем, я могу заказывать по «именам». В чем здесь разница?
Кроме того, почему я не могу добавить "order by id" в подзапросе? Если я запускаю этот подзапрос самостоятельно (см. Ниже), то «порядок по идентификатору» в порядке, но все вместе он не может работать. Почему это?
select names, count(*) as count
from (select id, names, (row_number() over (order by id) - row_number() over (partition by names order by id)) as grp
from table1
order by id -- added this in here, but it creates an error.
) as temp
group by grp, names
order by names