请看一下这个问题。你会发现它很有趣。
我有一个表member
,其中有一列result
。在此结果列中,三个值是可能的,并且一次只能使用一个值。可能的值W
,L
和V
。忘记V
,因为这里不需要。
比方说,我有5行,有3行,我有W
,在1行,我有L
,最后一行是V
。
所以这里3W和4L中的1L(W + L在一起)。所以W的百分比是75%。如何使用mysql计算它,如果可能使用eloquent会更好。
目前,我正在使用此解决方案 1.获取所有行 2.运行php循环 3.根据结果列的值,我正在计算百分比。工作良好。但我认为如果有更好的解决方案,为什么不找到它:)
希望你能解决这个问题。 提前致谢。
答案 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') );
我希望这会有所帮助。