如何用SQL统计每个Owner的去重错误活动数(含Laravel写法)
解决方案
正确的SQL语句
要实现按owner统计出现错误(error=1)的不同activity数量,核心是对activity字段去重后计数,使用COUNT(DISTINCT activity)即可满足需求:
SELECT `owner`, COUNT(DISTINCT `activity`) AS errors_per_activity FROM `analytics` WHERE `error` = 1 GROUP BY `owner` ORDER BY errors_per_activity DESC;
语句说明
COUNT(DISTINCT activity):仅统计每个owner下,error=1的不重复activity数量,自动忽略同一activity的多条重复错误记录WHERE error = 1:过滤出所有错误记录GROUP BY owner:按owner维度分组统计
Laravel 查询构造器写法
对应Laravel的查询构造器实现如下:
$results = DB::table('analytics') ->select('owner', DB::raw('COUNT(DISTINCT activity) as errors_per_activity')) ->where('error', 1) ->groupBy('owner') ->orderBy('errors_per_activity', 'desc') ->get();
或者使用更简洁的selectRaw写法:
$results = DB::table('analytics') ->where('error', 1) ->groupBy('owner') ->selectRaw('owner, COUNT(DISTINCT activity) as errors_per_activity') ->orderByDesc('errors_per_activity') ->get();
内容的提问来源于stack exchange,提问作者Ryk Waters
相关产品推荐
相关产品推荐

