我有3张桌子:
biblio
(biblionumber,title); items
(itemnumber,biblionumber); old_issues
(issues_id,itemnumber,issate) biblio
与商品有一对多关系
items
与old_issues有一对多的关系。
我想知道每个独特的biblio标题在biblio表中有多少项,以及在一个日期范围内发出该项目的次数。然后在最后一栏中我想要项目的比例与它发出的次数之比:
biblio title | Copies of title (Count of items in biblio) | Count of issues | count of items / count of issues
我遇到的问题是,如果我加入所有表格,我就不能准确计算biblio表中有多少项目,因为它们只会在已经发布的情况下被计算在内
例如,如果我有一个标题"终结者2" (biblio表中的一个唯一条目)它有5个副本(items表中有5个唯一条目),但之前没有发布过这些副本,那么我将得到0个项目的数量。
我应该得到如下结果:
"终结者2"在图书馆有5份,在2017年已发行245次。这是0.02的比例,这意味着我们需要订购更多的副本才能达到需求!
我认为我必须做一个独立于另一个表中的结果的某种子查询/嵌套查询,但不知何故将表连接在一起以获得一个视图。我太业余了,不知道该怎么做,所以任何帮助都会受到赞赏。 对不起,如果我的解释很难理解。
以下是我尝试使用的查询:
SELECT biblio.title, COUNT(items.itemnumber), COUNT(old_issues.itemnumber)
FROM old_issues
JOIN items ON old_issues.itemnumber = items.itemnumber
JOIN biblio ON items.biblionumber = biblio.biblionumber
WHERE old_issues.issuedate BETWEEN '2018-02-01' AND '2018-02-03'
GROUP BY biblio.biblionumber
答案 0 :(得分:3)
您可能希望交换表并使用LEFT JOIN
,因此即使不在日期范围内,行仍会显示,但值为0。
SELECT b.biblionumber,
b.title,
COUNT(DISTINCT i.itemnumber) AS `Total Copies`,
COUNT(o.itemnumber) AS `Total Issues`,
COUNT(DISTINCT i.itemnumber) / COUNT(o.itemnumber) AS `Ratio`
FROM biblio b
LEFT JOIN items i
ON b.biblionumber = i.biblionumber
LEFT JOIN old_issues o
ON o.itemnumber = i.itemnumber
AND o.issuedate BETWEEN '2018-02-01' AND '2018-02-03'
GROUP BY b.biblionumber,
b.title
这是Demo。