Oracle11g Oracle关系数据库

Oracle11g Oracle关系数据库,oracle11g,Oracle11g,我正在尝试实现一个代码,该代码可以过滤在图书馆中查阅书籍多于DVD的客户数量。该查询应该显示客户名称、总图书签出量和总DVD签出量。 这是我的代码,它统计了全部书籍签出和DVD签出。 SELECT C.CUSTOMER_FIRSTNAME||' '|| C.CUSTOMER_LASTNAME "CUSTOMER NAME",COUNT(*)"TOTAL CHECKOUTS" FROM CATALOG_ITEM CI JOIN PHYSICAL_ITEM PI ON CI.CATALOG_I

我正在尝试实现一个代码,该代码可以过滤在图书馆中查阅书籍多于DVD的客户数量。该查询应该显示客户名称、总图书签出量和总DVD签出量。

这是我的代码,它统计了全部书籍签出和DVD签出。

SELECT C.CUSTOMER_FIRSTNAME||' '|| C.CUSTOMER_LASTNAME "CUSTOMER 
NAME",COUNT(*)"TOTAL CHECKOUTS"
FROM  CATALOG_ITEM CI
JOIN PHYSICAL_ITEM PI
ON CI.CATALOG_ITEM_ID = PI.CATALOG_ITEM_ID
JOIN TRANSACTION TI
ON PI.PHYSICAL_ITEM_ID = TI.PHYSICAL_ITEM_ID
JOIN LIBRARY_CARD LC
ON TI.LIBRARY_CARD_ID = LC.LIBRARY_CARD_ID
JOIN CUSTOMER C
ON LC.CUSTOMER_ID = C.CUSTOMER_ID
GROUP BY C.CUSTOMER_FIRSTNAME||' '|| C.CUSTOMER_LASTNAME,CI.TYPE;
    SELECT C.CUSTOMER_FIRSTNAME ||' '||C.CUSTOMER_LASTNAME "CUSTOMER NAME",
    COUNT(CASE WHEN CI.TYPE = 'BOOK' THEN 1 END)"TOTAL BOOK CHECKOUTS",
    COUNT(CASE WHEN CI.TYPE = 'DVD' THEN 1 END)"TOTAL DVD CHECKOUTS"
    FROM CATALOG_ITEM CI
    JOIN PHYSICAL_ITEM PI
    ON CI.CATALOG_ITEM_ID = PI.CATALOG_ITEM_ID
    JOIN TRANSACTION TI
    ON PI.PHYSICAL_ITEM_ID = TI.PHYSICAL_ITEM_ID
    JOIN LIBRARY_CARD LI
    ON TI.LIBRARY_CARD_ID = LI.LIBRARY_CARD_ID
    JOIN CUSTOMER C
    ON LI.CUSTOMER_ID = C.CUSTOMER_ID
    GROUP BY C.CUSTOMER_FIRSTNAME ||' '||C.CUSTOMER_LASTNAME
    HAVING COUNT(CASE WHEN CI.TYPE = 'BOOK' THEN 1 END) > COUNT(CASE WHEN CI.TYPE = 
    'DVD' THEN 1 END)
    ORDER BY C.CUSTOMER_FIRSTNAME ||' '||C.CUSTOMER_LASTNAME;

我终于解决了我的问题。使用COUNT(当field='record'然后是1 END时的情况),我可以指定每列要计数的记录。

SELECT C.CUSTOMER_FIRSTNAME||' '|| C.CUSTOMER_LASTNAME "CUSTOMER 
NAME",COUNT(*)"TOTAL CHECKOUTS"
FROM  CATALOG_ITEM CI
JOIN PHYSICAL_ITEM PI
ON CI.CATALOG_ITEM_ID = PI.CATALOG_ITEM_ID
JOIN TRANSACTION TI
ON PI.PHYSICAL_ITEM_ID = TI.PHYSICAL_ITEM_ID
JOIN LIBRARY_CARD LC
ON TI.LIBRARY_CARD_ID = LC.LIBRARY_CARD_ID
JOIN CUSTOMER C
ON LC.CUSTOMER_ID = C.CUSTOMER_ID
GROUP BY C.CUSTOMER_FIRSTNAME||' '|| C.CUSTOMER_LASTNAME,CI.TYPE;
    SELECT C.CUSTOMER_FIRSTNAME ||' '||C.CUSTOMER_LASTNAME "CUSTOMER NAME",
    COUNT(CASE WHEN CI.TYPE = 'BOOK' THEN 1 END)"TOTAL BOOK CHECKOUTS",
    COUNT(CASE WHEN CI.TYPE = 'DVD' THEN 1 END)"TOTAL DVD CHECKOUTS"
    FROM CATALOG_ITEM CI
    JOIN PHYSICAL_ITEM PI
    ON CI.CATALOG_ITEM_ID = PI.CATALOG_ITEM_ID
    JOIN TRANSACTION TI
    ON PI.PHYSICAL_ITEM_ID = TI.PHYSICAL_ITEM_ID
    JOIN LIBRARY_CARD LI
    ON TI.LIBRARY_CARD_ID = LI.LIBRARY_CARD_ID
    JOIN CUSTOMER C
    ON LI.CUSTOMER_ID = C.CUSTOMER_ID
    GROUP BY C.CUSTOMER_FIRSTNAME ||' '||C.CUSTOMER_LASTNAME
    HAVING COUNT(CASE WHEN CI.TYPE = 'BOOK' THEN 1 END) > COUNT(CASE WHEN CI.TYPE = 
    'DVD' THEN 1 END)
    ORDER BY C.CUSTOMER_FIRSTNAME ||' '||C.CUSTOMER_LASTNAME;
如有任何替代方案,将不胜感激