Суммирование значений из 3 таблиц - PullRequest
1 голос
/ 06 октября 2009

У меня есть 3 таблицы, каждая таблица будет отображать записи пользователей, публикующих сообщения.

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

Вот что мне удалось сделать:

Таблица USERMESSAGE:
SELECT U.SenderID, COUNT(U.SenderID) AS U_NUM FROM USERMESSAGE AS U WHERE U.SenderID != U.ReceiverID GROUP BY U.SenderID

Таблица КОММЕНТАРИЙ:
SELECT C.UserID, COUNT(C.UserID) AS C_NUM FROM COMMENT AS C GROUP BY C.UserID

Таблица FRIENDLIST:
SELECT F.UserID, COUNT(F.UserID) AS F_NUM FROM FRIENDLIST AS F WHERE F.ListName = 'News Feed' GROUP BY F.UserID

Но не все пользователи будут публиковать сообщения во всех таблицах, поэтому некоторые идентификаторы пользователей не будут отображаться в некоторых таблицах.

Ответы [ 2 ]

2 голосов
/ 06 октября 2009

ВЫБЕРИТЕ UserID, SUM (NUM) как общее ОТ ( ВЫБЕРИТЕ U.SenderID В КАЧЕСТВЕ ИДЕНТИФИКАТОРА, COUNT (U.SenderID) В КАЧЕСТВЕ НОМЕРА ОТ СООБЩЕНИЯ ПОЛЬЗОВАТЕЛЯ КАК U ГДЕ U.SenderID! = U.ReceiverID ГРУППА ПО U.SenderID

UNION ALL
SELECT C.UserID, COUNT(C.UserID) AS NUM FROM COMMENT AS C GROUP BY C.UserID

UNION ALL
SELECT F.UserID, COUNT(F.UserID) AS NUM FROM FRIENDLIST AS F WHERE F.ListName = 'News Feed' GROUP BY F.UserID
)
GROUP BY UserID
0 голосов
/ 06 октября 2009

Я бы попробовал что-то вроде этого

DECLARE @Table1 TABLE(
        UserID INT
)

DECLARE @Table2 TABLE(
        UserID INT
)

DECLARE @Table3 TABLE(
        UserID INT
)

INSERT INTO @Table1 (UserID) SELECT 1
INSERT INTO @Table1 (UserID) SELECT 2
INSERT INTO @Table1 (UserID) SELECT 3

INSERT INTO @Table2 (UserID) SELECT 2
INSERT INTO @Table2 (UserID) SELECT 3

INSERT INTO @Table3 (UserID) SELECT 3

SELECT  ISNULL(CountTable1.CountUserIDTable1,0) +
        ISNULL(CountTable2.CountUserIDTable2,0) +
        ISNULL(CountTable3.CountUserIDTable3,0) CountOverTables,
        UserIDs.UserID
FROM    (
            SELECT  DISTINCT
                    UserID
            FROM    @Table1
            UNION   
            SELECT  DISTINCT
                    UserID
            FROM    @Table2
            UNION   
            SELECT  DISTINCT
                    UserID
            FROM    @Table3
        ) UserIDs LEFT JOIN
        (
            SELECT  UserID,
                    COUNT(UserID) CountUserIDTable1
            FROM    @Table1
            GROUP BY UserID
        ) CountTable1 ON UserIDs.UserID = CountTable1.UserID LEFT JOIN
        (
            SELECT  UserID,
                    COUNT(UserID) CountUserIDTable2
            FROM    @Table2
            GROUP BY UserID
        ) CountTable2 ON UserIDs.UserID = CountTable2.UserID LEFT JOIN
        (
            SELECT  UserID,
                    COUNT(UserID) CountUserIDTable3
            FROM    @Table3
            GROUP BY UserID
        ) CountTable3 ON UserIDs.UserID = CountTable3.UserID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...