我有以下psql表,其中包含以下列:
Library:
library_id
Shelf:
shelf_id
library_id (Library foreign key)
forbidden = (boolean)
Author
author_id
shelf_id (Shelf foreign key)
number_pages_witten
Book
book_id
author_id (Author foreign key)
book_name
我需要一个检索以下内容的查询:
对于library_id = 5,获取每个书架编写最多页面的作者的书名列表,对于所有具有"禁止" =假
到目前为止,我有以下内容:
SELECT name FROM Book AS b
INNER JOIN Author AS a
ON b.author_id = a.author_id
...
...
WHERE library_id=5
我的sql语法非常弱。我无法在书架上找到包含最多页面数量的作者,并将其插入查询的其余部分。谢谢。
答案 0 :(得分:0)
要求"撰写每个书架最多页面的作者,要求所有书架都禁止"禁止" = False" 是rank()
窗口函数的经典用例。从那以后,你只需要一个内部查询:
SELECT name
FROM book b
WHERE b.author_id IN (SELECT author_id
FROM (SELECT a.author_id,
RANK() OVER
(PARTITION BY a.shelf_id
ORDER BY number_pages_written DESC) rk
FROM author a
JOIN shelf s ON a.shelf_id = a.shelf_id
WHERE library_id = 5)
WHERE rk = 1)
答案 1 :(得分:0)
此查询同时检索每个作者和每个书架的大部分图书清单,
generateBubbleNames(nodes){
var maxCharacters = 10;
var labels = nodes.selectAll("text.label")
.data(function(d) { return [d]; });
labels.enter().append("text")
.attr({
"class": "label",
dy: "0.35em"
})
.style("text-anchor", "middle")
.style("font-size", function(d) { return d.r / 3; })
.text(function(d) {
return d[0]
})
.on("mousedown", function(){
d3.event.stopPropagation();
})
}
和Author Id
但它们各自相同的自联接来准备Shelf Id
,Number Pages Written
和Author Id
的列表Shelf Id
不同,Number Pages Written
和Author Id
分组希望对您的问题和所有相关问题都有用
Shelf Id