SQL查询,相同类型(名称)的条目总数

时间:2018-11-28 04:17:09

标签: sql sql-server

您好,我有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?在这种情况下,将“ AND num_sell> 2700”放在通常可以正常工作的位置后面即可。

3 个答案:

答案 0 :(得分:3)

从此查询中可以学到很多东西。

FROM subsidiary, subsidiarybook, book

请勿在{{1​​}}子句中的表名之间使用逗号。这样做是将FROM的每一行乘以subsidiary的每一行,然后将{strong>结果乘以乘以subsidiarybook的每一行。这就是book在当前结果中常数为5,163,400 的原因。

您的sum(num_sell)子句应该看起来更像这样:

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 实际来自哪个表

答案 1 :(得分:1)

HAVING子句将过滤GROUP BY之后的行。 Reference

HAVING SUM(num_sell) > 2700之后添加GROUP BY,以实现所需的过滤。

了解SELECT语句的逻辑处理顺序是一种有价值的工具。 Reference

答案 2 :(得分:1)

您使用交叉连接连接表,这就是为什么总和始终相同的原因。
请了解 SQL连接 交叉连接的定义 SQL CROSS JOIN产生一个结果集,该结果集是第一个表中的行数乘以第二个表中的行数。