【问题标题】:How to calculate the percentage in eloquent?如何计算 eloquent 中的百分比?
【发布时间】:2017-12-31 08:38:16
【问题描述】:

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

假设我有 5 行,在 3 行中我有 W,在 1 行中我有 L,最后一个是 V

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

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

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

【问题讨论】:

    标签: php mysql laravel eloquent


    【解决方案1】:

    如果您想要一个纯 Eloquent 解决方案,请执行以下操作:

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

    这将比实际从数据库中检索任何记录更有效。

    【讨论】:

    • 不仅仅是完美。但是我需要进行更多编辑才能正确计算它,但您是老板 :)。谢谢编辑我做了$wl = Member::where('user_id', 1)->whereIn('result', ['W'])->count(); $total = Member::where('user_id', 1)->where('result','!=','V')->count(); $percent = $wl / $total * 100;
    • 如果总数为零,请注意除以零!
    • @Sliq 虽然你在技术上是准确的......如果有 0 个成员,会有人看到它吗?
    【解决方案2】:

    您的问题有点含糊,但据我所知,COUNT 函数在这里应该足够了:

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

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

    【讨论】:

      【解决方案3】:

      如果 $total=0 怎么办?在这种情况下,除以零会产生错误。 请务必检查它,例如:

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

      希望您以后会发现它对您有所帮助。

      【讨论】:

        【解决方案4】:

        在 Laravel 中加入计数百分比查询:

        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') );
        

        我希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 2021-04-12
          • 2017-03-28
          • 2020-10-20
          • 1970-01-01
          • 2021-05-26
          • 2011-06-01
          • 2021-01-10
          相关资源
          最近更新 更多