2015-04-28 36 views
1

重复SUM我有一个表如下MySQL的 - 行不包括按降序排列

+----+---------+-------------+--------+ 
| 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 | 
| 5 |  5 | 192.168.5.1 | 1.5 | 
| 6 |  5 | 192.168.5.1 | 1.5 | 
| 7 |  5 | 192.168.5.3 | 0.5 | 
+----+---------+-------------+--------+ 

我想要得到的amount独特ip_address SUM和重复计数作为唯一的一个。

从上面表有7行从第一4个记录是user_id 2和最后3个记录user_id 5.

我试图量场与USER_ID沿着SUM降序和要输出作为如下。

user_id total_amount 
5   2.0 
2   1.5 

请帮我解决这个问题。

+0

'SELECT user_id,SUM(amount)AS total_amount FROM(SELECT user_id,amount WHERE 1 GROUP BY user_id)WHERE 1 GROUP BY user_id ORDER BY user_id DESC' – Huey

回答

2

试试这个方法:你想要什么

select user_id, sum(amount) 
from (select user_id, ip_address, amount 
     from tab 
     group by ip_address, amount) A 
group by user_id 
order by user_id desc 

SqlFiddle演示

+0

非常感谢:) –

+1

@SumitBijvani我很高兴我能帮你:) – Parado

1

GROUP BY与集合函数SUM,在DISTINCT行:

select user_id, sum(amount) as total_amount 
from (select distinct user_id, ip_address, amount 
     from tablename) t 
group by user_id 

不知道这是MySQL的,但测试和评论!

+0

这似乎是最好的解决方案。 –

0

我认为你将不得不使用此子查询:

SELECT inner_query.user_id, SUM(inner_query.amount) FROM (
    SELECT * FROM table_name GROUP BY user_id, ip_address ORDER BY user_id DESC 
) AS inner_query GROUP BY inner_query.user_id ORDER BY user_id DESC 
0

这应该做我相信:

SELECT USER_ID, SUM(amount) AS Amount, COUNT(*) AS [COUNT] from 
(SELECT DISTINCT user_id, ip_address, amount FROM mytable)q 
GROUP BY q.user_id