SQL错误 - 不是按表达式分组

时间:2014-04-16 19:46:37

标签: sql

通过这个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;

1 个答案:

答案 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等

否则,如果您没有对标量值函数进行分组或使用标量值函数,那么多行可能会为该列设置不同的值,那么查询结果会是什么?