sql - 在sql中列出多个表中的列
问题描述
我有一个这样形成的数据库:
BOOKTYPES ( book_type_id (PK), book_type )
CATEGORIES ( category_id (PK), category )
PUBLISHERS ( publisher_id (PK), publisher, speciality, country )
BOOKS ( book_id (PK), title, publisher_id (FK), published_year,
purchase_price, category_id (FK),purchase_date, pages,
book_type_id(FK) )
AUTHORS ( author_id (PK), first_name, last_name, pseudonym )
AUTHORSHIP ( author_id (PK), book_id (PK) )
现在,我需要帮助的是列出类别和包含该类别的书籍数量。这意味着我需要从 CATEGORIES 中检索类别,并从书籍中检索 category_id。我面临的问题是 category_id 已经存在于类别中,这不是我想要检索的。
我真的很感激这方面的一些帮助,因为它已经让我的大脑思考了很长一段时间了。
解决方案
列出类别和包含该类别的书籍数量
这看起来像一个简单的聚合查询books
:
SELECT category_id, COUNT(*) count_of_books FROM books GROUP BY category_id
如果您还想要类别名称,您可以JOIN
在categories
. 您可以通过在列名前加上它们所属的表(或表别名)来消除列名的歧义:
SELECT c.category, COUNT(*)
FROM books b
INNER JOIN categories c ON c.category_id = b.category_id
GROUP BY c.category_id, c.category
要过滤给定的类别计数,您可以使用HAVING
子句:
SELECT c.category, COUNT(*)
FROM books b
INNER JOIN categories c ON c.category_id = b.category_id
GROUP BY c.category_id, c.category
HAVING COUNT(*) > 5
推荐阅读
- syntax-error - 无法开始使用 Hello World Electron 应用示例
- saml - 未找到或多个断言的发布者。未找到有效的 SubjectConfirmation
- java - 尽管在 ValueEventListener 中正确声明,但无法调用 DataSnapshot
- python - AttributeError:'int'对象没有属性'_erase' Python 3.1
- powershell - 发送两个 youtube 播放列表更新时,为什么只更新第一个 youtube 播放列表?
- html - Instagram 嵌入改变风格
- rocksdb - 当rocksdb 无法将memtable 刷新到sst 文件时会发生什么?
- reactjs - this.state 反应
- python - QML 不能很好地与系统主题配合使用
- javascript - 仅删除 URL 的最后一个哈希,该哈希是使用 window.location.hash 添加的