2012-03-29 103 views
2

考慮下面的「鳴叫」表如何統計數據庫中重複記錄的數量?

tweet_id user_id text 
----------------------------------------- 
1   1  look at my tweet 
2   1  look at my tweet 
3   1  a very different tweet 
4   1  look at my tweet 
5   1  look at my tweets 
6   2  a cool tweet 
7   2  this is my tweet 
8   1  hello 
9   1  hello 

對於每一個用戶,我要算重複鳴叫的次數。在上面的例子中,user_id 1共有5個推文,其中2個是唯一的(tweet_id 3和5),3個是重複的(1,2和4)。所以用戶1的查詢結果應該是「3」。

[編輯] 看看user_id 1.推特「看我的推特」出現3次,推文「你好」2次。重複鳴叫的總數是3然後+ 2 = 5。

+0

我可以說任何最好的解決方案都會很慢 – safarov 2012-03-29 11:36:04

+0

可能的重複[在SQL表中查找重複值](https://stackoverflow.com/questions/) 2594829 /在sql-table中查找重複值) – tkruse 2018-01-15 05:21:53

回答

3

服務器側功能基團對於所述第一部分,您可以使用以下查詢

select user_id, sum(count) 
from 
(
select user_id, text, count(tweet_id) count 
from tweets 
group by 
user_id, text 
having count(tweet_id) > 1 
) t 
group by user_id 

內部查詢查找所有用戶和tweets有o不止一次地緊固。外部查詢爲每個用戶添加重複值

+0

你能解釋一下你的查詢嗎?當我爲用戶25(一個垃圾郵件帳戶)運行此查詢時,它返回39,740;而Apurv Gupta的查詢爲同一用戶返回36,577。我想通過比較兩個查詢來弄清楚爲什麼。我問他同樣的問題:) – Pr0no 2012-03-29 12:53:44

+0

@Reveller完成。我編輯了我的答案 – 2012-03-29 13:22:46

1

嘗試這種情況:

Select count(text)-count(distinct text) from tweets where user_id=1 
+0

您能解釋一下您的查詢嗎?當我爲用戶25(一個垃圾郵件帳戶)運行此查詢時,它返回36,577;而Amit Bhargava的查詢則爲同一用戶返回39,740。我想知道爲什麼:) – Pr0no 2012-03-29 12:52:51

+0

其實我的查詢計算重複次數,所以我的查詢將計數「看我的推文」作爲「一個」合法條目和其他兩個將被計爲重複,而阿米特的查詢計算的數量文字不止一次出現。我的查詢將會非常快。 :) – 2012-03-29 13:35:46

+0

計數(文本)返回7和計數(不同文本)返回4,所以輸出爲3。但是根據OP的預期輸出是5.您能解釋這個查詢 – Jayy 2012-03-29 13:38:03

0
select count(*) as count, text from table group by text order by user_id desc; 

你將需要然後通過USER_ID

+0

請解釋你的意思是由「服務器端功能」按user_id分組。爲什麼「GROUP BY user_id」在這裏沒有成功? – Pr0no 2012-03-29 12:54:57

+0

您使用哪種語言的代碼? – Straseus 2012-03-29 13:06:22

+0

我不明白。我正在使用SQL。如果輸出需要一些處理,我可以從PHP內部調用查詢,但是我希望能用一個查詢來完成,因爲它的工作速度快得多。 – Pr0no 2012-03-29 13:08:08