Как выбрать все столбцы и считать из таблицы? - PullRequest
1 голос
/ 22 сентября 2019

Я пытаюсь выбрать все столбцы в таблице top_teams_team, а также получить количество значений для столбца hash_value.Оператор sql здесь частично работает, так как возвращает два столбца, hash_value и total.Я все еще хочу, чтобы он также дал мне все столбцы таблицы.

select hash_value, count(hash_value) as total
from top_teams_team
group by hash_value

В приведенном ниже выражении sql он дает мне все столбцы, но отображаются дубликаты hash_value, а это не то, чтоЯ хочу.Я пытался вставить ключевое слово distinct, но оно не работало правильно, или, может быть, я не в нужном месте.

select *
from top_teams_team
inner join (
    select hash_value, count(hash_value) as total
    from top_teams_team
    group by hash_value
) q
on q.hash_value = top_teams_team.hash_value

Ответы [ 3 ]

0 голосов
/ 22 сентября 2019

Попробуйте использовать COUNT в качестве аналитической функции:

SELECT *, COUNT(*) OVER (PARTITION BY hash_value) total
FROM top_teams_team;
0 голосов
/ 22 сентября 2019

Комбинация оконной функции с DISTINCT ON может сделать то, что вы ищете:

SELECT DISTINCT ON (hash_value)
       *, COUNT(*) OVER (PARTITION BY hash_value) AS total_rows
FROM   top_teams_team
-- ORDER  BY hash_value, ???
;

DISTINCT ON применяется после оконной функции, поэтому Postgres сначала считаетстрок на каждый отдельный hash_value перед выбором первой строки для каждой группы (включая это количество).

Запрос выбирает произвольную строку из каждой группы.Если вы хотите конкретное, добавьте ORDER BY выражений соответственно.

Это не "число значений для столбца hash_value" , а число количество строк в отдельности hash_value.Я думаю, это то, что вы имели в виду.

Подробное объяснение:

В зависимости от нераскрытой информации могут быть (намного) более быстрые стили запросов ...

0 голосов
/ 22 сентября 2019

Я предполагаю, что вы получаете повторяющиеся столбцы, когда говорите: «но отображаются дубликаты hash_value»

select q.hash_value, q.total, ttt.field1, ttt.field2, ttt.field3
from top_teams_team ttt
join (
    select hash_value, count(hash_value) as total
    from top_teams_team
    group by hash_value
) q
on q.hash_value = top_teams_team.hash_value
...