通过这个SQL查询,我试图通过赞助人列出逾期的书。另外,我想通过赞助人对书籍进行分组和订购。我知道你在做GROUP BY函数时必须使用某种聚合函数。即使这样,我也得到了一个“不是一组表达”的错误。任何帮助表示赞赏。
编辑:更新的代码
如果我想获得每人和书的总费用怎么办?底部代码仍然导致相同的错误。
SELECT PATRON.LAST_NAME, PATRON.FIRST_NAME, PATRON.PHONE, BOOK.BOOK_TITLE, CHECKOUT.DUE_DATE, SUM((SYSDATE - CHECKOUT.DUE_DATE) * 1.00) AS FEE_BALANCE
FROM CHECKOUT
JOIN PATRON
ON CHECKOUT.PATRON_ID=PATRON.PATRON_ID
JOIN COPY
ON CHECKOUT.COPY_ID=COPY.COPY_ID
JOIN BOOK
ON COPY.BOOK_ID=BOOK.BOOK_ID
WHERE CHECKOUT.RETURN_DATE IS NULL
AND CHECKOUT.DUE_DATE > SYSDATE
GROUP BY PATRON.PATRON_ID
HAVING SUM((SYSDATE - CHECKOUT.DUE_DATE) > 0
ORDER BY PATRON.LAST_NAME, PATRON.FIRST_NAME;
答案 0 :(得分:0)
您需要将这3列添加到GROUP BY
子句...
PATRON.PHONE,BOOK.BOOK_TITLE,CHECKOUT.DUE_DATE
所以它会......
SELECT
PATRON.LAST_NAME,
PATRON.FIRST_NAME,
PATRON.PHONE,
BOOK.BOOK_TITLE,
CHECKOUT.DUE_DATE,
SUM((SYSDATE - CHECKOUT.DUE_DATE) * 1.00) AS BALANCE
FROM CHECKOUT
JOIN PATRON
ON CHECKOUT.PATRON_ID=PATRON.PATRON_ID
JOIN COPY
ON CHECKOUT.COPY_ID=COPY.COPY_ID
JOIN BOOK
ON COPY.BOOK_ID=BOOK.BOOK_ID
WHERE CHECKOUT.RETURN_DATE IS NULL
AND CHECKOUT.DUE_DATE > SYSDATE
GROUP BY PATRON.LAST_NAME, PATRON.FIRST_NAME, PATRON.PHONE, BOOK.BOOK_TITLE, CHECKOUT.DUE_DATE
ORDER BY PATRON.LAST_NAME, PATRON.FIRST_NAME
底线是,如果你有一个GROUP BY子句,你只能选择属于GROUP BY的列,除非你对它们使用某种标量值函数,比如COUNT,SUM,MAX,MIN等
否则,如果您没有对标量值函数进行分组或使用标量值函数,那么多行可能会为该列设置不同的值,那么查询结果会是什么?