【问题标题】:trying to get count statistics for simple db table试图获取简单数据库表的计数统计信息
【发布时间】:2013-05-23 22:57:40
【问题描述】:

我想从一个简单的数据库表中提取姓名、#kills、#deaths。

桌子有

_from(杀手),_to(死者),然后是事件的窃听。在 pvp 的情况下,我们想计算这个人是死了还是被杀了,然后把它加到他们的总数中

这可以通过查询来完成,还是我必须编写脚本?这不起作用@ all:

SELECT (select COUNT( _from ) from wiretaps group by _from) as num_kills, 
       (select COUNT( _to ) from wiretaps group by _to) as num_deaths, 
        _from as name
FROM wiretaps
WHERE message LIKE  "%PvP:%"

http://sqlfiddle.com/#!2/1e5d9/1

| _FROM |    _TO | MESSAGE | ID |
---------------------------------
|  naez |  salty |    PvP: |  1 |
|  naez | prince |    PvP: |  2 |
| chuck |   naez |    PvP: |  3 |

预期输出:

| name |    num_kills | num_deaths |
---------------------------------
|  naez   |  2 |    1 | 
|  prince |  0 |    1 | 
| chuck   |  1 |    0 | 
| salty   |  0 |    1 | 

【问题讨论】:

  • 尝试从子查询中取出 group by 子句。
  • 我不确定您要做什么。您可以发布示例数据和预期结果,或者制作一个 sqlfiddle 吗?
  • 只计算总行数
  • 你可以用select count(*) from wiretaps计算总行数。
  • 不,这就是取出 group by 子句的作用。我正在尝试将其格式化为名称、#kills、#deaths。 sqlfiddle.com/#!2/1e5d9/1

标签: mysql sql count


【解决方案1】:
select name, sum(num_kills) num_kills, sum(num_deaths) num_deaths
from (
    select _from name, count(*) num_kills, 0 num_deaths
    from wiretaps
    where message like '%PvP:%'
    group by _from
    union all
    select _to name, 0 num_kills, count(*) num_deaths
    from wiretaps
    where message like '%PvP:%'
    group by _to) x
group by name

SQLFIDDLE

【讨论】:

  • 尽管我对此表示赞成,但我认为一个简单的联合比一个联合更正确。如果好友的击杀数与死亡数相同,则 union all 将返回两行,并且总和将给出正确值的两倍。
  • @DanBracuk 不,因为计算杀戮的子查询的死亡人数为 0,反之亦然。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
  • 1970-01-01
  • 1970-01-01
  • 2019-10-04
  • 2020-02-27
  • 1970-01-01
相关资源
最近更新 更多