sql - SQL查询,具有相同类型(名称)的条目总和
问题描述
您好,我有 3 个不同的数据库,其中列出了一些关于书籍的不同内容。我正在寻找一种方法来编写一个 SQL 函数,它可以为我提供每个子公司(分支)销售的书籍总和,并且只有那些总和大于 2700 的书籍 + 流派必须是浪漫的。我很容易弄清楚这个功能:
SELECT name, SUM(num_sell) as 'numSum'
FROM subsidiary,subsidiarybook,book
WHERE genre= "Romance"
group by name
由于你们看不到那里的所有数据,我只想问为什么我总是只获得具有完全相同总输出的不同名称的分支。我想它只需要第一个的总和,而不是属于不同名称的实际总和。
输出如下所示:
Amazonhive 5163400
Celestial Library 5163400
Cloudcast 5163400
Cosmic Library 5163400
Globalworld 5163400
Imaginetworks 5163400
Leopardworks 5163400
Quick Rooster Media 5163400
Radiantelligence 5163400
Royal Library 5163400
Sphinx Brews 5163400
Spring Harbor ... 5163400
Surge Records 5163400
Tiny Mermaid Arts 5163400
Triumphoods 5163400
Tucan Productions 5163400
这些值应该不同,因为这些值的总和肯定不一样。将不胜感激。另外我如何检查总和是否> 2700?在 where 后面加上“ AND num_sell >2700”,因为在这种情况下它正常工作是行不通的。
解决方案
从这个查询中可以学到很多东西。
FROM subsidiary, subsidiarybook, book
不要在FROM
子句中的表名之间使用逗号。这样做的目的是将的每一行subsidiary
乘以 的每一行,subsidiarybook
然后将结果乘以 中的每一行book
。这就是为什么在您当前的结果中sum(num_sell)
是一个常数 5,163,400 。
您的FROM
子句应该看起来更像这样:
FROM subsidiary
INNER JOIN subsidiarybook ON subsidiary.id = subsidiarybook.subsidiary_id
INNER JOIN book ON sb.book_id = book.id
一旦您更正了连接(注意,上面显示的连接是在不知道表的实际列名的情况下完成的!)然后您应该开始在sum(num_sell)
. 要过滤任何聚合的结果,请使用HAVING
子句。
SELECT book.name, SUM(num_sell) as 'numSum'
FROM subsidiary
INNER JOIN subsidiarybook ON subsidiary.id = subsidiarybook.subsidiary_id
INNER JOIN book ON sb.book_id = book.id
GROUP BY book.name
HAVING SUM(num_sell) > 2700
现在,可能还有更多需要学习的东西。例如subsidiary
,最终结果似乎不需要,也许可以简化为:
SELECT book.name, SUM(num_sell) as 'numSum'
FROM subsidiarybook
INNER JOIN book ON sb.book_id = book.id
GROUP BY book.name
HAVING SUM(num_sell) > 2700
但要确切知道如何进一步提供帮助,我们需要更多地了解您的桌子。
例如。我们不知道num_sell
实际来自哪个表
推荐阅读
- flutter - Flutter web 从其所在页面读取cookies
- logstash - grok 过滤器和logstash
- c# - mp3 音乐文件的专辑封面
- javascript - 您如何强制用户在打开谷歌文档时登录?
- r - 如何将未来的包与 Plumber API 一起使用
- regex - 重复捕获匹配组(子匹配)
- jquery - 在数据表中添加带有列名的下拉列表
- python-2.7 - 2D 数据集的 LSTM 分类
- typescript - 使用 jest 和 @testing-library/dom 测试 vanilla 项目时,TestingLibraryElementError: Found multiple elements occurred
- prepared-statement - Mybatis 混合预处理语句和 sql 注入