Я пытаюсь сделать SQL-запрос, который возвращает все уникальные имена и сумму вхождений для каждого имени.
Это то, что я придумал, но он просто получает сумму всех имен, а не сумму каждого имени отдельно.
select distinct(etunimi) as etunimi,
(select count(distinct(etunimi)) as määrä from jasenet)
from jasenet;
Правильно ли это решение при решении этой проблемы или есть ли другой способ достижения этого? благодарю вас.
Если вы группируете столбец, то агрегировать функции, такие как count()
применяются к каждой группе, а не к полному набору результатов.
select etunimi, count(*)
from jasenet
group by etunimi
Это потому, что вы не ссылаетесь на colomn из outerquery
с subquery
Поэтому на него следует ссылаться так:
select distinct etunimi,
(select count(*)
from jasenet j1
where j1.etunimi = j.etunimi
) as määrä
from jasenet j;
Тем не менее, я бы также предложил использовать предложение GROUP BY
, которое более эффективно, чем коррелированный subquery
.