СЛЕДУЕТ СОЕДИНИТЬ 3 таблицы с GROUP BY и SUM - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть 3 таблицы: tblusers, tblproducts и tbldailylog:

tblusers

UserID  UserName
------  --------
  1001  Mary
  1002  John

tblproducts

UserID  ProductKey  ProductName
------  ----------  ----------  
  1001  key1        p1
  1001  key2        p2  

tbldailylog

UserID  ProductKey  Counter  Updated
------  ----------  -------  ----------
  1001  key1             10  2018-01-01
  1001  key1             15  2018-01-02
  1001  key2             50  2018-01-01

==========

Test1: СЛЕДУЮЩЕЕ СОЕДИНЕНИЕ 2 ТАБЛИЦЫ: tblusers и tblproducts

Запрос: SELECT tblusers.UserID, tblusers.UserName, tblproducts.ProductKey FROM tblusers LEFT JOIN tblproducts ON tblusers.UserID = tblproducts.UserID GROUP BY tblusers.UserID

Результат:

UserID  UserName  ProductKey
------  --------  ----------
  1001  Mary      key1
  1001  Mary      key2
  1002  John

==========

Test2: ПОЛУЧИТЕ ВСЕ СЧЕТЧИК КАЖДОГО ProductKey

Запрос: SELECT UserID, ProductKey, SUM(Counter) as Total FROM tbldailylog GROUP BY ProductKey

Результат:

UserID  ProductKey  Total
------  ----------  -----
  1001  key1           25
  1001  key2           50

==========

Я хотел бы получить следующий конецрезультат, как мне объединить 3 таблицы вместе?Конечный результат сортируется по SUM (Counter) DESC.Я извиняюсь за то, что не смог отобразить данные таблицы в хорошем формате для более удобного просмотра.Спасибо за помощь.

Конечный результат:

UserID  UserName  ProductKey  Total  ProductName
------  --------  ----------  -----  ----------
  1001  Mary      key2           50  p2
  1001  Mary      key1           25  p1
  1002  John        

Редактировать: Извините, что не указал это в моем исходном сообщении.Я добавил столбец «ProductName» в «tblproducts» и конечный результат, поэтому мы должны использовать все 3 таблицы в запросе, потому что «ProductName» не существует в «tblusers» и «tbldailylog».Спасибо.

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018

Я думаю, вы можете попробовать это -

select tu.userid,
       tu.UserName,
       tdl.ProductKey,
       tp.ProductName,
       sum(tdl.Counter) as Total
  from tblusers tu
  left join tbldailylog tdl
    on tu.userid = tdl.userid
  left join tblproducts tp
    on tu.userid = tp.userid
 group by tu.userid, tu.UserName, tdl.ProductKey, tp.ProductName
 order by sum(tdl.counter) desc
0 голосов
/ 19 сентября 2018

Если вы используете базу данных Oracle, это будет работать: выберите t.UserID, t.UserName, tp.ProductKey, сумму (tl.counter) всего из TBLUSERS t левое соединение TBLPRODUCTS tp в t.userid = tp.userid левое соединениеTBLDAILYLOG tl для t.userid = tl.userid и tp.productkey = tl.productkey группируются по tp.ProductKey, t.UserID, t.UserName по сумме;

0 голосов
/ 19 сентября 2018
SELECT l.UserID, u.UserName, l.ProductKey, p.ProductName SUM(l.Counter) as Total 
FROM tblUsers u
LEFT JOIN tbldailylog l ON l.UserID = u.UserID
LEFT JOIN tblProducts p ON p.UserID = t.UserID AND p.ProductKey = t.ProductKey
GROUP BY l.UserID, l.ProductKey, u.UserName, p.ProductName
...