当前位置: 首页 > 面试题库 >

左外连接总和成倍增加问题

鞠通
2023-03-14
问题内容

表:购物

shop_id shop_name  shop_time
1   Brian  40
2   Brian   31
3   Tom   20
4   Brian   30

桌子:香蕉

banana_id  banana_amount  banana_person
1    1     Brian
2    1     Brian

我现在要打印:

姓名:汤姆| 时间:20 | 香蕉:0
名称:Brian | 时间:101 | 香蕉2

我使用了以下代码:

$result = dbquery("SELECT tz.*, tt.*,
SUM(shop_time) as shoptime,
count(banana_amount) as bananas

 FROM shopping tt
 LEFT OUTER JOIN bananas tz ON tt.shop_name=tz.banana_person
 GROUP by banana_person
LIMIT 40
");



while ($data5 = dbarray($result)) {

echo 'Name: '.$data5["shop_name"].' | Time: '.$data5["shoptime"].' | Bananas: '.$data5["bananas"].'<br>';


}

问题是我得到了这个:

姓名:汤姆| 时间:20 | 香蕉:0
名称:Brian | 时间:202 | 香蕉6

我只是不知道该如何解决。


问题答案:

问题是使用*(因为您正在使用分组依据)。另外,SUM(shop_time)被乘以香蕉中的尽可能多的行,因此得到202(香蕉中的两行)

试试这个查询:

SELECT tt.shop_name, 
           SUM(shop_time)           AS shoptime, 
           Ifnull(banana_amount, 0) AS bananas 
    FROM   shop tt 
           LEFT OUTER JOIN (SELECT banana_person, 
                                   SUM(banana_amount) AS banana_amount 
                            FROM   bananas 
                            GROUP  BY banana_person) tz 
             ON tt.shop_name = tz.banana_person 
    GROUP  BY shop_name;


 类似资料:
  • 问题内容: 我有一张收入表 当我执行此查询 它产生结果 没关系,现在我想将求和结果与另一个具有这种结构的表合并 当我执行这样的聚合函数加入时 结果翻倍 我不明白为什么加倍,请帮忙 问题答案: 它翻倍,因为您在基金和收入表中重复了标题。这将匹配的记录数相乘。如果删除聚合函数并查看原始数据,这很容易看到。看这里 解决此问题的方法是创建聚合的内联视图,并加入这些结果。 输出 演示

  • LEFT OUTER JOIN 左外连接 [ ] 需求:查询所有分类,如果该分类下没有商品,则不显示该分类 [ ] 实现: SELECT `goods`.`id`, `goods`.`title`, `goods`.`price`, `goods`.`cate_id`, `cate`.`id`, `cate`, `cate.title` F

  • MariaDB 用于返回条件中指定的左侧表中的所有行,并仅返回满足连接条件的其他表中的行。 也被称为。 语法: 图形表示如下: 注: 上图中,两个图形的左侧表(table1)和右侧表(table2)中间交叉蓝色部分,以及左侧表(table1)就是连接返回的结果集。 为了方便演示,我们需要创建两个表,并插入一些数据 - 插入数据 - 当前表中的行记录如下 - 当前表中的行记录如下 - 示例1 使用以

  • 问题内容: 我有一个Hibernate的服务方法,例如:。securityId2由用户传递。每个SecurityContact与一个Contact有多对一的关系,因此Hibernate在运行此查询时会自动调用联接。但是,Hibernate始终运行的联接是内部联接,因此无法正常运行。有没有办法强迫Hibernate在内部生成左外部联接?这是SecurityContact类的代码: 问题答案: 尝试多

  • 问题内容: 我有三个表: 命令 OrderId,int PK CustomerId,与客户之间为int FK,允许为NULL 顾客 CustomerId,int PK CompanyId,将FK转换为Company,不允许为NULL 公司介绍 CompanyId,int PK 名称nvarchar(50) 我想选择所有订单,无论是否有客户,如果有客户,也要选择客户的公司名称。 如果我使用此查询…

  • 当我添加一个左连接来获取外部表的计数时,它将我其他左连接表的总和值与计数相乘,我也不能在这里使用不同的总和,因为两个值可以是相同的: