QueryBuilder:数据透视表的总和值

Posted

技术标签:

【中文标题】QueryBuilder:数据透视表的总和值【英文标题】:QueryBuilder: Sum values of a pivot table 【发布时间】:2016-04-12 06:20:36 【问题描述】:

我是 Laravel 和 Eloquent 的新手。我的数据库中有用户、产品和投票表。用户可以对产品进行投票(0 到 5),因此这是一种“多对多”关系,投票表就像一个支点:

用户:ID、姓名、电子邮件、密码 产品:id、名称、型号、品牌 投票:user_id、product_id、投票

我这样映射这个架构:

// User model:
public function product_votes()

    return $this->belongsToMany('App\Product', 'votes')->withPivot('vote');


// Product model:
public function product_votes()

    return $this->belongsToMany('App\User', 'votes')->withPivot('vote');

因此,John 可以对产品 X 投 5 票,对产品 Y 投 0 票。Bob 可以对产品 X 投 2 票,对产品 Y 投 3 票,依此类推...

我正在尝试查询所有产品,以及每个产品的投票总和。比如:

SELECT p.*, (SUM(v.vote) / COUNT(*)) as votes FROM products p INNER JOIN votes v on v.product_id = p.id GROUP BY p.id

如何使用 QueryBuilder 做到这一点?我的映射对吗?

【问题讨论】:

【参考方案1】:

以下方法可以解决问题:

Product::select('products.*', DB::raw('SUM(vote)/COUNT(*) as votes'))
->join('votes', 'votes.product_id', '=', 'products.id')
->groupBy('products.id')
->get();

您可以通过调用 toSql() 而不是 get() 来查看将要运行的查询。

【讨论】:

就是这样!也感谢 toSql() 提示。

以上是关于QueryBuilder:数据透视表的总和值的主要内容,如果未能解决你的问题,请参考以下文章

是否可以通过 Power BI 获取数据透视表的来源?

php sql中带有日期、变量类别和总和值的数据透视表

SQL Server 2005 - 在没有总和/计数和动态值列表的情况下透视数据

Excle数据透透视表如何删除数据透视表

oracle sql中的动态数据透视

HIVE 数据透视和总和/计数