Php MYSQL,使用多个求和,而不是将多个列求和在一起

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

因此,我试图收集一些好的统计数据,但我有一个问题,使这一个工作。它似乎应该是相当基本的,但我的生活不能让这个工作,我遇到的所有搜索都是试图将列求和在一起的人(即简单求和(a+b+c)作为t类型的东西)

我的桌子看起来像:

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似乎我只是把事情按错误的顺序安排了!我真的不习惯这样做