php - 计算 MySQL 中特定行的平均值

标签 php mysql average greatest-n-per-group

我有以下两个表:

内容:

| id | name  | created_by |
+----+-------+------------+
| 1  | test  |     me     |
| 2  | test2 |     me     |
| 3  | test3 |     you    |
| 4  | test4 |     me     |

喜欢_不喜欢:

| id | content_id | like | dislike |
+----+------------+------+---------+
| 1  |     1      |  1   |    0    |
| 2  |     2      |  1   |    0    |
| 3  |     2      |  0   |    0    |

我需要计算 created_by = me 的最后 2 行内容的平均点赞数。

例如,最后两个 content_id 是 2 和 4。

like_dislike表有content_id为2的记录,一行like为1,一行like为0,所以平均值为1/2。

我尝试了以下查询,但它不起作用:

SELECT ((SELECT COUNT(*) 
   FROM `like_dislike` 
   WHERE `like`='1' AND `content_id`= pi.id) / (COUNT(*))
FROM content AS pi 
WHERE pi.create_by = 'me' 
ORDER BY pi.id DESC
LIMIT 2

最佳答案

SELECT x.* 
     , AVG(liked) 
  FROM content x 
  JOIN content y
    ON y.created_by = x.created_by 
   AND y.id >= x.id 
  JOIN like_dislike z
    ON z.content_id = x.id
 WHERE x.created_by = 'me' 
 GROUP BY x.id 
HAVING COUNT(DISTINCT y.id) <= 2;

或者类似的东西

关于php - 计算 MySQL 中特定行的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27205099/

相关文章:

php - CakePHP 3 : Unable to insert fixtures when running phpunit

php - 我们可以在 Codeigniter 中连接多个数据库吗?

mysql - AVG() 不分组

ruby - ActiveRecord 值是字符串类型数字的列的平均值

php - 使用 trans_default_domain 的 Symfony2 翻译

php - 根据另一个 JSON 编码数组对另一个数组进行排序

php - CodeIgniter:加密不同服务器上应用程序和 mysql 数据库之间的通信?

php - 单击按钮显示数据库的不同行

mysql - 使用带日期的 pdo prepare 和 UNION 不返回任何结果(mysql)

JavaScript 从用户输入中查找平均值