2015-04-27 91 views
0

我有一個表如下MySQL的 - 行的SUM不重複

+----+---------+-------------+--------+ 
| id | user_id | ip_address | amount | 
+----+---------+-------------+--------+ 
| 1 |  2 | 192.168.1.1 | 0.5 | 
| 2 |  2 | 192.168.1.1 | 0.5 | 
| 3 |  2 | 192.168.1.2 | 0.5 | 
| 4 |  2 | 192.168.1.3 | 0.5 | 
+----+---------+-------------+--------+ 

我想量與僅獨特IP_ADDRESS SUM和計數重複,因爲只有1

從上面表有4行從前兩個IP地址是相同的,但我想只計算一個。

我想要這樣的金額字段的總和。

SELECT SUM(amount) AS total_amount FROM table 

我得到2作爲輸出。

但我想1.5作爲輸出,請你幫我解決這個問題。

+0

對於同一IP將量是一樣的嗎? – Beginner

+0

@Beginner是金額相同 –

+0

@axiac它不會工作 –

回答

2

最好的辦法是通過IP地址,最先聚集,然後再彙總:

SELECT SUM(amount) AS total_amount 
FROM (SELECT ip_address, MAX(amount) as amount 
     FROM table 
     GROUP BY ip_address 
    ) t 
+0

非常感謝,完美的工作:) –

0

同樣可以通過使用DISTINCT也可以實現。這是一個有點快相比GROUPBY提供你沒有任何索引上ipaddr

結帳這個鏈路 What's faster, SELECT DISTINCT or GROUP BY in MySQL?

SELECT SUM(amt) FROM (SELECT DISTINCT ipaddr,amt FROM ipaddr_sum) t 

enter image description here enter image description here

現在上面的差異只是4排。試想一下,如果表中有行萬盧比,那肯定是有幫助的(注:提供youdo沒有索引你ipaddr

+0

鏈接的答案已過時。我無視你構建DISTINCT優於GROUP BY的場景。 – Strawberry

+0

看看這些圖片......差異僅僅是4行,如果你在工作10萬行的話,這將意味着很多 – Abhinav

+0

不,它不會! – Strawberry