Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何选择某些';id';并对结果进行分组_Mysql_Sql_Database_Join_Select - Fatal编程技术网

Mysql 如何选择某些';id';并对结果进行分组

Mysql 如何选择某些';id';并对结果进行分组,mysql,sql,database,join,select,Mysql,Sql,Database,Join,Select,在此查询中,我尝试选择用户已支付的款项总额: 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 dia

在此查询中,我尝试选择用户已支付的款项总额:

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;
通常,由每个用户曾经支付的总金额组成的组。例如,如果他支付了50美元,他属于“0-100”组。如果他支付了500-他在“100…”组中,但现在我需要知道每个组中用户支付的金额


如果你愿意帮忙,谢谢你

我想您需要一个
SUM
AVG

SELECT user_id,
       SUM(Amount) `sum`,
       AVG(Amount) `avg`
FROM payments 
WHERE payment_time BETWEEN '2000-01-01' AND '2001-01-01'
GROUP BY ser_id
或者(2000-01-01和2001-01-01之间的
金额之和除以特定用户的记录总数):


如果我理解正确,就不需要所有这些子查询。 简单的
sum
groupby
应该这样做:

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

选择t1.user\u id,sum(t2.amount)作为总计,如果(sum(t2.amount)这个查询有太多错误。你说的“组”是什么?@sskoko,我说的是由每个用户支付的总金额组成的组。例如,如果他支付了50美元,他在“0-100”组中。如果他支付了500美元,他在“100”组中但现在我需要知道每个组中用户支付的金额。
SELECT user_id,
       SUM(CASE WHEN payment_time BETWEEN '2000-01-01' AND '2001-01-01' THEN Amount ELSE 0 END) / COUNT(*) `customAvg`
FROM payments 
WHERE payment_time BETWEEN '2000-01-01' AND '2001-01-01'
GROUP BY ser_id
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