【问题标题】:using group by and count and where query together in Laravel在 Laravel 中同时使用 group by 和 count 以及 where 查询
【发布时间】:2018-10-24 13:00:15
【问题描述】:

我是 Laravel 的初学者,所以如果我的问题很简单,我提前道歉。我有一个包含 3 列(ID、V、结果)的表 (table1),如下所示:

ID---------v---------result
1----------123---------True
1----------123---------True
1----------123---------false
2----------123---------false
2----------123---------True
2----------123---------error

我想计算每个 ID 有多少假和真。比如表2:

ID--------numOfT---------numOfF--------other
1----------2---------------1------------0
2----------1---------------1------------1

我认为我应该使用 group bycountwhere,如下所示:
$table2 = DB::table('table1') ->groupBy('ID')-> ->计数();
但我不知道确切的查询。
知道如何获得 table2 吗?

【问题讨论】:

  • 蒂姆给了你一个具体的答案。但是,如果您有兴趣更深入地了解该主题,则搜索此站点的术语更普遍的是:“pivot query”。
  • 谢谢@Watcher。我会搜索的。

标签: sql laravel


【解决方案1】:

这是一个原始的 MySQL 查询,可以满足您的要求,使用条件聚合:

SELECT
    ID,
    COUNT(CASE WHEN result = 'True'  THEN 1 END) AS numOfT,
    COUNT(CASE WHEN result = 'false' THEN 1 END) AS numOfF,
    COUNT(CASE WHEN result NOT IN ('True', 'false') THEN 1 END) AS other
FROM table1
GROUP BY
    ID;

相应的 Laravel 代码可能如下所示:

$result = DB::table('table1')
    ->select('ID',
             DB::raw('COUNT(CASE WHEN result = 'True' THEN 1 END) AS numOfT'),
             DB::raw('COUNT(CASE WHEN result = 'false' THEN 1 END) AS numOfF'),
             DB::raw('COUNT(CASE WHEN result NOT IN ('True', 'false') THEN 1 END) AS other'))
    ->groupBy('ID')
    ->get();

【讨论】:

  • 谢谢@TimBiegeleisen,但我收到一个错误,我认为这是因为我的 HTML 技能不佳,“结果”是表格吗?
  • 你的问题没有提到任何错误。我的代码给你什么错误?
  • 我不认为是因为你的代码,可能是因为我的 HTML 代码显示“结果”。 73759960ec9472cb9df83cffa29f0db8 第 67 行中的 FatalErrorException:不能将 stdClass 类型的对象用作数组
  • 我不知道/无法控制你用上面的代码做什么。如果您的 HTML 代码存在重大问题,也许您应该为此打开另一个问题。
  • 我的问题是,输出 ($result) 是一个表格,对吧?
猜你喜欢
  • 1970-01-01
  • 2021-12-19
  • 2023-03-11
  • 1970-01-01
  • 2020-08-15
  • 1970-01-01
  • 1970-01-01
  • 2017-02-24
  • 1970-01-01
相关资源
最近更新 更多