如何计算雄辩的百分比?

时间:2017-12-31 08:38:16

标签: php mysql laravel eloquent

请看一下这个问题。你会发现它很有趣。 我有一个表member,其中有一列result。在此结果列中,三个值是可能的,并且一次只能使用一个值。可能的值WLV。忘记V,因为这里不需要。

比方说,我有5行,有3行,我有W,在1行,我有L,最后一行是V

所以这里3W和4L中的1L(W + L在一起)。所以W的百分比是75%。如何使用mysql计算它,如果可能使用eloquent会更好。

目前,我正在使用此解决方案 1.获取所有行 2.运行php循环 3.根据结果列的值,我正在计算百分比。工作良好。但我认为如果有更好的解决方案,为什么不找到它:)

希望你能解决这个问题。 提前致谢。

4 个答案:

答案 0 :(得分:5)

你的问题有点模糊,但从我看到的COUNT函数应该足够了:

SELECT
    100.0 * COUNT(W) / COUNT(*) AS w_pct,
    100.0 * COUNT(L) / COUNT(*) AS l_pct
FROM yourTable;

当然,如果您已经在进行聚合,那么我们可以修改上述查询以包含GROUP BY

答案 1 :(得分:4)

如果您需要纯粹的Eloquent解决方案,请执行以下操作:

$wl = Member::whereIn('result', ['W', 'L'])->count();
$total = Member::count();
$percent = $wl / $total * 100;

这比从数据库中实际检索任何记录要高效得多。

答案 2 :(得分:0)

如果$ total = 0怎么办?在这种情况下,除以零将产生错误。 请确保同时进行检查:

if ($total != 0) {
$percent = $wl / $total * 100;
} else {
$percent = 0;
}

我希望您将来会有所帮助。

答案 3 :(得分:0)

在Laravel Join查询中,具有计数百分比:

select('marketplace.store_name', 'users.name' , **DB::raw('round((count(products.user_id)/(select count(*) from products)*100),2) as percentage')** , DB::raw('round(avg(products.user_id),2) as avg') );

我希望这会有所帮助。