Php MYSQL,使用多个求和,而不是将多个列求和在一起
因此,我试图收集一些好的统计数据,但我有一个问题,使这一个工作。它似乎应该是相当基本的,但我的生活不能让这个工作,我遇到的所有搜索都是试图将列求和在一起的人(即简单求和(a+b+c)作为t类型的东西) 我的桌子看起来像:Php MYSQL,使用多个求和,而不是将多个列求和在一起,php,mysql,sql,count,sum,Php,Mysql,Sql,Count,Sum,因此,我试图收集一些好的统计数据,但我有一个问题,使这一个工作。它似乎应该是相当基本的,但我的生活不能让这个工作,我遇到的所有搜索都是试图将列求和在一起的人(即简单求和(a+b+c)作为t类型的东西) 我的桌子看起来像: btcfrom | btc to | btc | btctime usera userb 5 3204580 usera userc 2 3450342 userb userc 1 3428925 userc
btcfrom | btc to | btc | btctime
usera userb 5 3204580
usera userc 2 3450342
userb userc 1 3428925
userc usera 2 2358734
我试图实现的是返回以下结果的查询:
btcto| btcgot | timesgot | btcsent | timessent
usera 2 1 7 2
userb 5 1 1 1
userc 3 2 2 1
所以我认为可以这样做的代码是:
SELECT btcto,SUM(btc) AS btcgot, COUNT(btc) AS timesgot
(SELECT btcfrom, sum(btc) as btcsent, COUNT(btc) AS timessent
FROM tblBots
GROUP BY btcfrom) AS s
FROM tblBots
WHERE btcto=s.btcfrom
GROUP BY btcto ORDER BY btcgot DESC
如果有人能至少为我指出正确的方向,我将非常感激
谢谢据我所知,您需要将表格聚合两次,一次在“收件人”上,一次在“发件人”上,以获得所需的摘要 在SQL的某些方言中,您可以使用
full outer join
合并这两个集合。您也可以使用union all
然后重新聚合数据:
select BTCto, sum(TimesGot) as TimesGot, sum(BTCgot) as BTCgot,
sum(BTCsent) as BTCsent, sum(TimeSent) as TimeSent
from ((select BTCto, count(*) as TimesGot, sum(btc) as BTCgot,
NULL as BTCsent, NULL as TimeSent
from tblBots t
group by BTCto
) union all
(select BTCfrom, NULL as TimesGot, NULL as BTCgot,
count(*) as BTCsent, sum(btc) as TimeSent
from tblBots t
group by BTCfrom
)
) t
gorup by btcTo;
由于以下几个原因,您的查询无法工作。但它正在尝试为
select
子句中的子查询提供表别名。您只能在from
子句中的内容上使用表别名。您的查询只需稍加修改:
SELECT btcto,SUM(btc) AS btcgot, COUNT(btc) AS timesgot, btcsent, timessent
from tblBots
join (SELECT btcfrom, sum(btc) as btcsent, COUNT(*) AS timessent
FROM tblBots
GROUP BY btcfrom) AS s on btcto=s.btcfrom
GROUP BY btcto
ORDER BY btcto
或者,由于您实际上是在组合两个单独的查询,因此可以使用UNION:
select btcto, sum(btcgot), sum(timesgot), sum(btcsent), sum(timessent)
from (
select btcto, sum(btc) as 'btcgot', count(*) as 'timesgot', 0 as 'btcsent', 0 as 'timessent'
from tblBots
group by btcto
union
select btcfrom, 0, 0, sum(btc), count(*)
from tblBots
group by btcfrom ) as q
group by btcto;
太棒了。这正是我想要的。为帮助干杯!:D似乎我只是把事情按错误的顺序安排了!我真的不习惯这样做