SELECT reviews.*, COUNT(comments.review_id)
AS comment_count
FROM reviews
LEFT JOIN comments ON comments.review_id = reviews.review_id
GROUP BY reviews.review_id
ORDER BY reviews.review_id ASC。
當我運行這段代碼時,我從我的SQL查詢中得到了我想要的東西,但是如果我運行下面的代碼
SELECT *, COUNT(comments.review_id)
AS comment_count
FROM reviews
LEFT JOIN comments ON comments.review_id = reviews.review_id
GROUP BY reviews.review_id
ORDER BY reviews.review_id ASC;
然后我得到一個錯誤 "列必須出現在GROUP BY子句中或被用于聚合函式中
。我只是想知道有什么區別,為什么行為會不同。
謝謝
uj5u.com熱心網友回復:
在第一個例子中,該列只取自reviews表。 雖然沒有資料庫允許使用SELECT *和GROUP BY,但標準SQL是允許的,前提是review_id是主鍵。
問題在于您在SELECT中包含了GROUP BY中沒有包含的列。 這只允許 - 在某些資料庫中 - 在非常特殊的情況下,GROUP BY中的列被宣告為唯一地識別每一行(一個主鍵就是這樣)。
第二個例子中有來自comments的列,不符合這個條件。 因此,它是不允許的。
第二個例子中有來自comments的列不符合這個條件。
uj5u.com熱心網友回復:
在使用group by查詢的選擇部分,你可以只選擇那些你在group by中使用的列。
由于你用reviews.review_id來分組,你可以得到第一種情況的輸出。在第二個查詢中,你試圖獲得所有的記錄,這在group by中是不可能的。
如果你需要選擇不在group by子句中出現的列,你可以使用window函式。希望這有意義。
https://www.windowfunctions.com/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/334019.html
標籤:
