首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按两个表中的百分比值排序的查询

按两个表中的百分比值排序的查询
EN

Stack Overflow用户
提问于 2012-11-14 10:59:29
回答 1查看 92关注 0票数 0

我有两个表,其结构如下:

表1:显示玩家尝试的次数。

代码语言:javascript
复制
Player_id, n_tries, date

表2:显示玩家的点击次数。

代码语言:javascript
复制
Player_id, n_hits, date

最后,我希望有一个球员今天的命中率(尝试与命中),以及今天到一周前的点击率的增加/减少。我希望结果按(今天)命中下降的百分比排序。因此,例如,如果我们有一个id = 1的播放器和一个id = 2的播放器,那么这个数据如下:

表1:

代码语言:javascript
复制
1, 10, "2012-10-14"
2, 13, "2012-10-14"
1, 20, "2012-10-7"
2, 15, "2012-10-7"

表2:

代码语言:javascript
复制
1, 5, "2012-11-14"
2, 10, "2012-11-14"
1, 0, "2012-11-7"
2, 3, "2012-11-7"

我需要最后证明这一点:

Player_id,%命中率(今天),点击率差(今天和一周前)

代码语言:javascript
复制
2            77%       +233%
1            50%       +100% (actually is infinite -> (5 - 0)/0 )

我有从两个表中获取值的查询:

第一个表-尝试次数:

代码语言:javascript
复制
SELECT player_id, date, sum(n_tries) 
FROM player_tries 
WHERE (d_date = CURDATE() OR d_date = DATE_SUB(CURDATE(), INTERVAL 7 DAY))
GROUP BY date, player_id
ORDER BY player_id, date

我做一个求和(N_tries),因为一个球员可以有多行的尝试为特定的一天。

第二表-点击次数:

代码语言:javascript
复制
SELECT player_id, date, sum(n_hits) 
FROM player_hits
WHERE (d_date = CURDATE() OR d_date = DATE_SUB(CURDATE(), INTERVAL 7 DAY))
GROUP BY date, player_id
ORDER BY player_id, date

因此,我的问题是:如果从第一个查询中得到一个结果列表,如下所示:

代码语言:javascript
复制
Player_id, date,         n_tries
1         2012-11-07        20
1         2012-11-14        10
2         2012-11-07        15
2         2012-11-14        13

在第二张桌子上,我得到了这个:

代码语言:javascript
复制
 Player_id, date,         n_hits
    1         2012-11-07        0
    1         2012-11-14        5
    2         2012-11-07        3
    2         2012-11-14        10

什么是最好的方式,能够混合这些结果,并能够有某种结构,是按%点击(今天)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-14 11:24:13

选择今天和一周前的点击:

代码语言:javascript
复制
select h1.player_id, `h1.date`,
       sum(h1.hits) as hits_today,
       sum(h2.hits) as hits_last_week
from player_hits h1
left join player_hits h2 on h2.player_id = h1.player_id
                            and `h2.date` = date_sub(`h1.date`, interval 7 days)
group by h1.player_id, `h1.date`;

如果仅希望在一周前有相应条目时才需要行,则将左侧联接替换为内部联接。

tries表的select看起来是等效的。

首先,以player_id作为键,将结果选择到数组中。

代码语言:javascript
复制
$hits_array = array();
$result = mysqli_query(...);
while ($row = mysqli_fetch_assoc($result)) {
    $player = $row['player_id'];
    $hits_array[$player] = $row['hits'];
}

您对尝试表也是如此。

现在可以加入player_id键上的两个数组:

代码语言:javascript
复制
foreach ($hits_array as $player => $hits) {
    echo "$player " . ($hits / $tries[$key]) . "\n";
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13377516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档