Получить общее количество группы по запросу - PullRequest
0 голосов
/ 09 ноября 2011

Я пытаюсь включить общее количество в качестве столбца в запросе:

SELECT un.user, un.role
FROM [Unique] un group by user, role;

В этом запросе у меня есть 2 столбца, но я хочу добавить третий столбец в качестве общего количества строк, рассчитанных в приведенном вышезапрос.

Ответы [ 3 ]

1 голос
/ 09 ноября 2011

Это работает в MS Access (и очень похоже на то, что будет работать в Oracle и других базах данных) :

SELECT
    un.user,
    un.role,
    (
        SELECT COUNT(*)
        FROM (
            SELECT un1.user, un1.role
            FROM [Unique] un1 group by user, role
        )
    )
FROM [Unique] un group by user, role;

Вот фактический синтаксис Oracle:

SELECT
    un."user",
    un.role,
    (
        SELECT COUNT(*)
        FROM (
            SELECT un1."user", un1.role
            FROM "Unique" un1 group by "user", role
        )
    )
FROM "Unique" un group by "user", role;

Для справки приведено специальное решение для SQL Server, использующее CTE :

WITH Q([user], role) AS (
    SELECT un.[user], un.role
    FROM [Unique] un group by [user], role
)
SELECT *, (SELECT COUNT(*) FROM Q)
FROM Q
1 голос
/ 09 ноября 2011
SELECT un.user, un.role, 
   (select count(*) from 
      (Select user, role from [unique] group by user, role)) as CNT
FROM [Unique] un 
group by user, role;

Хотя это придется пересчитывать для каждого времени передвижения ..., вероятно, есть лучший способ.

и я поддерживаю мои комментарии выше, вы можете получить это из наборов записей, хотя большинство языков разработки. поэтому возвращение его в результатах запроса вместо просмотра метаданных, по меньшей мере, странно.

Select un.user, un.role
From [unique] un
group by grouping sets ((user, role), ())
0 голосов
/ 09 ноября 2011

Если COUNT (*) не работает (и не работает для каждой базы данных), вы можете попробовать COUNT (0).Это быстрее, чем подсчет первичного ключа.Вы можете ожидать, что COUNT (0) будет 1, но на практике он всегда возвращает количество строк.По крайней мере, это относится к каждой базе данных, которую я когда-либо использовал.И, конечно, вы можете использовать любую другую константу вместо 0 - кроме нуля.

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