【问题标题】:I used SQL sum groupby, why is it a total sum rather than a group-by-group sum?我使用SQL sum group by,为什么它是总和而不是逐组总和?
【发布时间】:2021-10-29 13:26:13
【问题描述】:

例子

CREATE TABLE book(
    title VARCHAR(100) PRIMARY KEY, 
    price INT NOT NULL
)

CREATE TABLE buyer(
    name VARCHAR(20) ,
    title VARCHAR(100),
    primary key(name,title),
    foreign key(title)
    references book
)

我将省略输入数据的代码

book data = {('a',100),('b',200),('c',100),('d',300)}
buyer data = {('kim','a'),('kim','b'),('ca','c'),('yan','d'),('yan','c')}

select name, sum(price) sum_price
from book,buyer
group by name

我想知道名字的总数

但这个结果是所有书籍的总和。

不知道是什么问题

【问题讨论】:

  • 今日提示:切换到现代、明确的JOIN 语法。更容易编写(没有错误),更容易阅读(和维护),并且如果需要更容易转换为外连接。
  • book, buyerCROSS JOIN 相同。只需使用SELECT * 不带GROUP BY 子句检查结果

标签: sql sum


【解决方案1】:

在没有连接条件的情况下连接两个表会产生两个表的完整笛卡尔积。

试试这个,应该可以解决你的问题。

select name, sum(price) sum_price
from buyer br left join book bk on br.title=bk.title
group by name

【讨论】:

    【解决方案2】:

    这是因为您没有进行正确的联接,结果导致了交叉联接,这意味着book 表的每一行都将与buyer 表的每一行联接。尝试添加 where 语句并正确连接 2 个表,或在 from 部分中使用 join 语法。

    【讨论】:

    • 交叉连接,不是全外连接。
    • 是的,你是对的@jarlh!
    猜你喜欢
    • 2013-12-07
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多