设计查询以从不同的表中选择计数

时间:2018-12-02 19:44:08

标签: sql oracle computer-science

This is the schema for my questions

嗨,我没有SQL Developer的经验,我正在尝试为以下问题构建查询:

对于目录中的每张DVD,我都需要显示标题,长度,release_date以及所有库中所有客户已检出该DVD的次数。 另外,我想包括那些尚未签出但仍显示0的内容,并按标题对结果进行排序。

到目前为止,我在查询中有这个,但是我在这里有库存:

--Question C. ************* VERIFY
Select
    Catalog_Item.Title,
    DVD.Length,
    Catalog_Item.Release_Date,
    (
        Select 
            Count(Transaction.Transaction_ID) 
        From Transaction 
        Where
            DVD.Catalog_Item_ID = Physical_Item.Catalog_Item_ID
            And Physical_Item.Physical_Item_ID = Transaction.Physical_Item_ID
    ) as "Total_DVD"
From 
    Catalog_Item,DVD,
    Physical_Item
Group by
    Catalog_Item.Title,
    DVD.Length,
    Catalog_Item.Release_Date

如果我运行此确切的查询,我会报错

Not a Group By Expression 

如果我排除GROUP BY,我得到的结果似乎与正确的输出不符。

关于我可以使用哪种语法来实现所需输出的任何建议?谢谢!

2 个答案:

答案 0 :(得分:1)

您在查询中放置了三个表,但是您没有链接它们。如果不链接它们,则将看到过多重复的行。 另外,您的子查询链接有误,我假设您尝试将主查询中缺少的链接放在此处。

我相信您需要这样的东西:

Select
     CI.Title
    ,DVD.Length
    ,CI.Release_Date
    ,NVL(TR.TotalTransactions,0) TotalTransactions
From  Catalog_Item CI
INNER JOIN DVD ON DVD.Catalog_Item_ID  = CI.Catalog_Item_ID 
LEFT JOIN Physical_Item PHI  ON CI.Catalog_Item_ID = PHI.Catalog_Item_ID
LEFT JOIN (SELECT Physical_Item_ID
                , Count(Transaction_ID) TotalTransactions
            FROM Transaction 
            GROUP BY Physical_Item_ID
            ) TR ON PHI.Physical_Item_ID = TR.Physical_Item_ID

答案 1 :(得分:0)

首先,将Catalog_Item,Physical_Item和DVD连接在一起。没有适当的连接条件,这三个表将使用笛卡尔积连接进行连接-这可能是您看到意外结果的原因之一。