mysql - SQL 按一次操作的结果排序

标签 mysql sql operation

我需要按照 (LIKES (puntuacion=1) - DISLIKE (puntuacion=0)) 的结果对这个查询的结果进行排序。

这是我按喜欢的总和排序的旧查询 (puntuacion=1)。

"SELECT entradas.* , SUM(puntuacion) AS total_likes
            FROM entradas
            LEFT JOIN valoraciones ON valoraciones.entradas_id = entradas.id
            and valoraciones.puntuacion=1
            WHERE fecha>=:fecha1 AND aceptada=1
            GROUP BY entradas.id
            ORDER BY  `total_likes` DESC
            limit 5";

试过了,但是 total_likes/total_dislikes 是时间变量,不能用它们操作。

     SELECT entradas.* , SUM(puntuacion=1) AS total_likes, SUM(puntuacion=0) AS total_dislikes, total_likes-total_dislikes AS TOTAL
            FROM entradas
            LEFT JOIN valoraciones ON valoraciones.entradas_id = entradas.id
            WHERE aceptada=1
            GROUP BY entradas.id
            ORDER BY  `total_likes` DESC
            limit 5

最佳答案

SELECT entradas.* , (SUM(v1.puntuacion) - SUM(v0.puntuacion)) AS total_likes
FROM entradas
LEFT JOIN valoraciones v1 ON v1.entradas_id = entradas.id and v1.puntuacion=1
LEFT JOIN valoraciones v0 ON v0.entradas_id = entradas.id and v0.puntuacion=0
WHERE fecha >= :fecha1 AND aceptada=1
GROUP BY entradas.id
ORDER BY  `total_likes` DESC
limit 5

[编辑]

对不起,伙计,上面的查询不太好。我认为下面这个是您正在寻找的正确答案:

SELECT entradas.* , SUM(IF(v.puntuacion = 1, 1, -1)) AS total_likes
FROM entradas
LEFT JOIN valoraciones v ON v.entradas_id = entradas.id
WHERE fecha >= :fecha1 AND aceptada=1
GROUP BY entradas.id
ORDER BY  `total_likes` DESC
LIMIT 5

关于mysql - SQL 按一次操作的结果排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16144901/

相关文章:

MySQL从一组中提取相似数据

php - MYSQL JOIN 和 COUNT

php - 如果 mysql 数据库中存在,则不提交表单

sql - 直接在 INSERT INTO 语句中使用外键值

c++ - 运算速度

mysql - 错误代理 : Redirection of MySQL queries

asp.net - 使用 EF 的 sql server 数据库镜像不适用于我的 asp.net 应用程序

sql - C# SqlParameter - 提供 SQL (Microsoft SQL)

python - subprocess.Popen 成功消息

c - 尝试在 C 中执行简单的 do_operation 函数