mysql - 如何选择某些“id”的总和并按组划分结果
问题描述
在这个查询中,我尝试选择用户支付的总金额:
SELECT *
from (select IFnull(t.diapason,'total') as diapason,
t.total_amount as total_amount
FROM
(SELECT p.user_id, p.amount as total_amount, CASE
when amount<=100 then '0-100'
when amount>100 then '100...' END AS diapason
FROM (SELECT distinct payments.user_id, SUM(amount) AS amount
FROM payments inner JOIN (SELECT DISTINCT user_id FROM payments where
payment_time between '2000-01-01' and '2001-01-01') a ON
payments.user_id = a.user_id
GROUP BY payments.user_id) p) t
GROUP BY diapason WITH ROLLUP) as t1
ORDER BY total_amount desc;
但是我得到的结果是错误的。我应该改变什么来找出 2000-01-01 - 2001-01-01 期间的付款总额。由于用户曾经做过付款,结果必须按组划分。
这些是表活动和付款。
activity
user_id login_time
1 2000-01-01
2 2000-03-01
....
payments
user_id payment_time amount
1 2000-05-04 10
1 2000-03-01 20
2 2000-04-05 5
...
通常,由每个用户支付的总金额组成的组。例如,如果他支付了 50 美元 - 他在组“0-100”中。如果他支付了 500 - 他在“100 ...”组中,但现在我需要知道每个组中用户支付的总和。
谢谢,如果你会尝试帮助!
解决方案
如果我理解正确,则不需要所有这些子查询。很简单sum
,group by
应该这样做:
SELECT t1.user_id, sum(t2.amount) as total, IF(sum(t2.amount)<=100, '0-100', '100...') as grp
FROM t1
INNER JOIN t2 on t1.user_id = t2.user_id
WHERE t2.payment_time between '2000-01-01' and '2001-01-01'
GROUP BY t1.user_id
推荐阅读
- ionic-framework - 如何在 ionic 应用程序中本地存储我的计数值?
- python - 如何使用 django 纠正 zmq 地址使用错误
- python - 用scrapy爬取后如何关闭json文件的写入?
- batch-file - 在 windows registery 命令中修剪变量
- java - java web app - 从 MySQL 表中获取结果并在 web 上显示的最佳方式
- node.js - 如何使用 node.js 在 Dropbox api 中共享文件
- android - Sqlcipher 未能在 0,0 处为 text/blob 分配 1638057 字节
- ubuntu - ffmpeg avcodec_open2() 仅在 ubuntu 中返回错误 -22
- android - 自定义图标 - 底部导航视图
- ios - 如何在 Swift 中让视频在 5 秒后自动停止录制?