【问题标题】:MySQL query to sum one column and count another column, from two tables, based on a common value?MySQL查询根据一个共同值对两个表中的一列求和并计算另一列?
【发布时间】:2020-08-14 03:20:10
【问题描述】:

我在尝试构建一个查询时遇到问题。我希望在这里能得到一些帮助......

我有两张桌子。每个表有两列。它们的描述如下:

表:“令牌”

 Column 1: "Name" varchar(20)
 Column 2: "Color" varchar(10)

表格:“分数”

 Column 1: "Name" varchar(20)
 Column 2: "Points" Int

我想要一个查询,该查询将列出每个名称一次,并为每个名称列出该名称的点总和,以及 Color="RED" 的计数

表 1 的示例数据:

"BOB","GREEN"
"LARRY","RED"
"JIM","BLUE"
"JIM","RED"
"FRANK","RED"
"BOB","BLUE"
"JIM","RED"

表 2 的示例数据:

"LARRY",100
"BOB",40
"JIM",200
"BOB",100
"PAUL",250

我的表格输出类似于(行顺序不重要):

BOB,140,0
LARRY,100,1
JIM,200,2
FRANK,0,1
PAUL,250,0

我怎样才能做到这一点?

【问题讨论】:

    标签: mysql sql group-by sum where-clause


    【解决方案1】:

    你可以聚合,然​​后加入:

    select t1.name, t1.reds, t2.points
    from (select name, sum(color = 'RED') reds from table1 group by name) t1
    inner join (select name, sum(points) points from table2 group by name) t2 
        on t1.name = t2.name
    

    如果任一表中缺少names,那么您可以改用union all

    select name, sum(reds) reds, sum(points) points
    from 
        select name, 1 reds, 0 points from table1 where color = 'RED'
        union all
        select name, 0, points points from table2
    ) t 
    group by name
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-19
      • 2015-06-23
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 2015-04-27
      • 2020-04-07
      • 2019-05-19
      相关资源
      最近更新 更多