SQL:如何从单独的表动态计算值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL:如何从单独的表动态计算值?相关的知识,希望对你有一定的参考价值。

我正在构建一个黑客新闻风格的页面,我正在尝试从数据库中获取要显示在页面上的帖子列表,包括关于当前用户是否已对特定帖子进行投票的数据。

我正在尝试查询posts列表(来自posts表),我想在votes表(post.id on votes.postId)上执行连接,以查看某个帖子是否已被当前的选票投票用户,并为每个回来的帖子返回类似userHasVoted的内容,即时计算。

我一直试图让这种情况发生,但似乎只返回用户投票的帖子。

如何查询数据库以显示每个帖子以及它是否由给定用户投票?

这是我的投票表:

+----+--------+--------+-------+
| id | userId | postId | value |
+----+--------+--------+-------+
|  1 |      1 |      1 |     1 |
|  2 |      2 |      1 |     1 |
|  3 |      4 |      3 |     1 |
|  4 |      1 |      5 |     0 |
|  5 |      3 |      2 |     1 |
|  6 |      4 |      8 |     1 |
|  7 |      1 |      8 |     1 |
|  8 |      4 |      9 |     1 |
|  9 |      1 |      9 |     1 |
+----+--------+--------+-------+

这是我的帖子表(省略标题,内容,链接等):

+----+---------------+--------+
| id | publishStatus |authorId|
+----+---------------+--------+
|  1 | PUBLIC        |      1 |
|  2 | PUBLIC        |      2 |
|  3 | PUBLIC        |      3 |
|  4 | PUBLIC        |      4 |
|  5 | PUBLIC        |      2 |
|  6 | PUBLIC        |      1 |
|  7 | PUBLIC        |      1 |
|  8 | PUBLIC        |      1 |
|  9 | PUBLIC        |      1 |
+----+---------------+--------+
答案

以下是一个例子,你可以得到YesNo而不是10

SELECT DISTINCT p.*, CASE 
        WHEN v.value = 0
            THEN 'No'
        ELSE 'Yes'
        END userHasVoted
FROM posts p
INNER JOIN votes v ON p.id = v.postid

enter image description here

另一答案

选择a.name作为post_name,sum(vote.value)count_of_votes来自a.id = vote.postid group on name a join a vote

-----------------------------查找所有用户对特定帖子的总投票数

以上是关于SQL:如何从单独的表动态计算值?的主要内容,如果未能解决你的问题,请参考以下文章

SQLite:使用单独的表进行动态键值替换

用排除法计算 SQL 表中最常见的单词

在两个单独的表中计算计划总额与实际总额

动态SQL基础概念复习(Javaweb作业5)

我可以使用 SQL 将存储为 CSV(逗号分隔值)的表列的内容拆分为新表中的单独行吗?

如何使用 SQL 值动态填充列表框