表:购物
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) 我想选择所有订单,无论是否有客户,如果有客户,也要选择客户的公司名称。 如果我使用此查询…
当我添加一个左连接来获取外部表的计数时,它将我其他左连接表的总和值与计数相乘,我也不能在这里使用不同的总和,因为两个值可以是相同的: