来自同一 ID 的 SQL 列的 SUM 值

Posted

技术标签:

【中文标题】来自同一 ID 的 SQL 列的 SUM 值【英文标题】:SUM values from SQL column from same ID 【发布时间】:2013-04-22 01:27:09 【问题描述】:

这是来自 wordpress 的 comment_meta。里面有一个自定义的 meta_key: rating。

我想获得该帖子的所有评分的总和。

这样做的目的是从用户评分中获取平均值。我有评论者的总数,我只需要 SUM。

它的用途是用于 Schema.org AggregateReview:<meta itemprop="ratingValue" content=""/>

我尝试通过 jQuery 添加值,但由于某种原因,架构没有注册稍后在 DOM 中添加的文本。

var sum = 0;
$('.comment_rate').each(function()
    numItems = $('.comment_rate').length
    sum += (parseFloat($(this).text()) / numItems);
    $('span[itemprop="ratingValue"]').text(sum);
);

原帖

我有这张桌子(抱歉,图片只是我知道如何展示的方式):

我想对匹配的comment_id 中的meta_value 求和。

到目前为止,我有这个,但它对整个列求和,而不是匹配相同 id 的列。

<?php
    $result = mysql_query('SELECT SUM(meta_value) AS value_sum FROM wp_play_commentmeta');
    $row = mysql_fetch_assoc($result);
    $sum = $row['value_sum'];
    echo $sum;
?>

【问题讨论】:

【参考方案1】:

使用GROUP BY

SELECT comment_id, SUM(meta_value) AS value_sum 
FROM wp_play_commentmeta
GROUP BY comment_id;

在这里查看它的实际效果:

SQL Fiddle Demo

如果您只想对那些具有rating 元密钥的人执行此操作,则将其添加到WHERE 子句中。像这样的:

SELECT comment_id, SUM(meta_value) AS value_sum 
FROM wp_play_commentmeta
wHERE meta_key = 'rating'
GROUP BY comment_id;
Updated SQL Fiddle Demo

更新:

JOIN 两个表和GROUP BY post_id。像这样的:

SELECT 
  p.post_id,
  SUM(m.meta_value) AS value_sum
FROM wp_play_commentmeta    AS m
INNER JOIN wp_play_comments AS p ON m.comment_ID = p.comment_Id
wHERE meta_key = 'rating'
GROUP BY p.post_id;

注意:请停止使用Mysql_* 扩展,它们已被弃用。此外,您的代码以这种方式容易受到SQL Injection 的攻击。请改用PDO 或准备好的语句。

【讨论】:

是的,这会奏效,但我完全忽略了无法匹配收视率,而不是 comment_id @Ahhhhhhhhhhhhhdfgbv - 你是什么意思?这不是你要找的吗?您能否更新您的问题并向我展示您正在寻找的预期结果?谢谢。 @Ahhhhhhhhhhhhdfgbv - 你的意思是,SUM 只有meta_value 对于那些拥有meta_key = rating 的人?? 我更新了,希望它有意义。抱歉,我的问题是愚蠢的,这是一个迟到的认识。 @Ahhhhhhhhhhhhhdfgbv 第二个查询应该给你你在找什么,它应该给你每条评论的总和或评级。这不是你想要的吗?你试过了吗?【参考方案2】:

查询将是

  SELECT SUM(meta_value) AS value_sum, comment_id FROM wp_play_commentmeta
  Group by comment_id

【讨论】:

以上是关于来自同一 ID 的 SQL 列的 SUM 值的主要内容,如果未能解决你的问题,请参考以下文章

无法在具有聚合值的 HAVING 子句中使用来自子查询表连接的单值列

在 SQL 中,如何为另一列的每个不同值创建新的值列?

具有匹配索引列的多个表的数据框连接值列

SQL:两个数据库,都有包含公共值列的表。如何查找丢失的行

在一个查询中分别为两个不同的日期生成两个 SUM 值列

具有多个值列的数据透视表