總數的信息,我有兩個表:選擇用戶與他們的意見
User : (id, username, created_at, updated_at)
Comment : (comment_id, user_id, username, created_at, updated_at)
注:是的,我明白評語表有成對的場,‘用戶名’。但是,表格已經按照這種方式設計,我沒有權限重新設計模式。
這是一個輸出格式,我想從表格中提取數據。
id | username | num_of_counts
而且這是我和嘗試了兩種不同的SQL代碼(我已經簡化了代碼告訴你什麼是我想要做的...小的拼寫錯誤可能存在,但總體思路是。這裏)
-- Ver 1
SELECT u.id, u.username, COUNT(c.id)
FROM User u
LEFT JOIN Comment c ON u.id = c.id
GROUP BY u.id
-- Ver 2
SELECT u.id, u.username, c.cnt
FROM User u
LEFT JOIN (SELECT id, COUNT(*) AS cnt
FROM Comment
GROUP BY user_id) c
ON u.id = c.id
GROUP BY u.id
兩個代碼給了我同樣的問題:
「列‘用戶名’,是因爲它不是在選擇列表中無效包含3210在聚合函數或GROUP BY子句」
閱讀some articles把它之後,我明白了,有選擇‘用戶名’和‘ID’分組行之間的衝突。
我仍然在谷歌上搜索和閱讀similar cases,但仍然得到了同樣的問題(我不是善於SQL的東西...)
什麼是編寫SQL查詢來獲取輸出的最佳途徑這種格式?
id | username | num_of_comments
1 | Tyler | 3
2 | Jane | 5
3 | Jack | 1
我建議你添加用戶名,cnt到group by子句,即group by u.id,u.username,c.cnt – ankur140290
@GordonLinoff你說得對!!!!我打mysql而不是sql -server。對不起,大概是2-3點,當我問這個問題時,我太累了......修正了。 – Raccoon
@Raccoon第一個版本是你想要的,但你必須通過c將u.username添加到組中因爲選擇中使用的所有未彙總的列必須出現在組中。 – jpw