SQL - Использование Group By и Count для сбора суммы уникальных комбинаций двух полей - PullRequest
2 голосов
/ 15 сентября 2009

У меня есть два поля (проект и версия) из двух разных таблиц, и я пытаюсь получить общее количество записей, соответствующих уникальным комбинациям проекта / версии, однако версии в некоторых проектах совпадают с версиями в других проектах (Project 1 имеет версию 1.0, как и проект 2), поэтому мой оператор SQL не работает:

SELECT TOP 100 PERCENT project.PNAME AS PROJECT, version.VNAME AS VERSION, COUNT(version.VNAME)
FROM issue INNER JOIN
project ON issue.PROJECT = project.ID INNER JOIN
version ON issue.VERSION = version.ID
GROUP BY project.PNAME, version.VNAME

Я думал, что смогу использовать что-то вроде

COUNT(project.PNAME, version.VNAME)

но я ошибался ... Я уверен, что ответ прост, но я не могу его найти ... какая-либо помощь?

Ответы [ 4 ]

4 голосов
/ 15 сентября 2009

попробуйте это:

SELECT p.PNAME PROJECT, v.VNAME VERSION,
    COUNT(*) projectVersionCount
FROM issue i
   JOIN project p ON i.PROJECT = p.ID 
   JOIN version v ON i.VERSION = v.ID
GROUP BY project.PNAME, version.VNAME
3 голосов
/ 15 сентября 2009

Я не уверен насчет SQL Server, но обычно вы можете использовать COUNT (*) для подсчета количества сгруппированных строк. Простой пример, показывающий количество в PNAME:

SELECT COUNT(*), project.PNAME FROM project GROUP BY project.PNAME 
2 голосов
/ 15 сентября 2009

Получает ли это то, что вы хотите?

SELECT  project.PNAME AS PROJECT, version.VNAME AS VERSION, COUNT(*)
FROM issue 
INNER JOIN project 
    ON issue.PROJECT = project.ID 
    INNER JOIN version 
        ON issue.VERSION = version.ID
GROUP BY project.PNAME, version.VNAME

Если не показать результаты, которые вы получили, в сравнении с тем, что, по вашему мнению, вы должны были получить.

2 голосов
/ 15 сентября 2009

Что не так с:

SELECT project.PNAME, version.VNAME, COUNT(*)
FROM issue 
INNER JOIN project ON issue.PROJECT = project.ID 
INNER JOIN version ON issue.VERSION = version.ID
GROUP BY project.PNAME, version.VNAME

Разве это не даст вам все комбинации названия проекта / названия версии и количества этих комбинаций ??

Марк

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