我有3个表:tblusers,tblproducts和tbldailylog:

钝器

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


产品

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


编辑:很抱歉,在我的原始帖子中没有明确说明。我在“ tblproducts”和最终结果中添加了“ ProductName”列,因此我们必须使用查询中的所有3个表,因为“ tblusers”和“ tbldailylog”中不存在“ ProductName”。谢谢。

最佳答案

我认为您可以尝试-

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

关于mysql - LEFT JOIN 3个表,具有GROUP BY和SUM,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52410609/

10-09 00:58