2016-06-12 59 views
1

我的表是這樣的:如何選擇列和數(*)?在SQL

用戶(ID用戶,nameUser等)

聊天(idChat,txtChat)

成員(ID用戶,idChat)

我必須選擇用戶中的所有列,以及有多少組聊天(超過2個成員)被用戶和多少次常規聊天(兩個成員)。

我的第一個想法是做兩個或更多的選擇和使用聯合,但它巡迴演出並不像那樣工作。

我想是這樣的

select * 
    from User 
    where idUser in (select idUser 
        from Members) 

我試圖讓那名在聊天,但我真的不知道該怎麼算藏漢

或類似的東西的用戶,我真的不知道如何計算(*)我知道如何計算選擇得到的行數,但我不知道如何將它作爲另一列

+1

告訴我們你已經嘗試過的,什麼是不工作。請閱讀http://stackoverflow.com/help/how-to-ask –

+0

imma編輯它謝謝,我只是不知道還有什麼要說的tbh,因爲我曾經很好,沒有多大意義 –

+0

@ LucasAraujo:https://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ ..這將有助於快速回復和upvotes以及 – TheGameiswar

回答

2

這樣的事情應該爲你做點事情(用GROUP BY) :

SELECT u.idUser, 
     u.nameUser, 
     COUNT(DISTINCT m.idChat) as countChats 
FROM [User] u 
LEFT JOIN Members m 
    ON u.idUser = m.idUser 
GROUP BY u.idUser, u.nameUser 

或用PARTITION BY

SELECT DISTINCT 
     u.idUser, 
     u.nameUser, 
     COUNT(m.idChat) OVER (PARTITION BY nameUser) as countChats 
FROM [User] u 
LEFT JOIN Members m 
    ON u.idUser = m.idUser 
+0

謝謝很多回復!我真的不明白什麼是不同的或分區的,但這會幫助我接近! –

+0

DISTINCT - 爲了獲得沒有重複的數據,PARTITION BY - 將查詢結果集劃分爲多個分區,它與GROUP BY類似,但不一樣。 – gofr1

+0

好吧,我明白它的方式更好,謝謝! –