通过连接多个表进行计数

苏鲁·梅恩·斯塔克

我有3张桌子

1)question  
2)options
3)answers

表1列出了多项选择题。表2包含该问题的多个选择。

考虑一个例子,我有一个问题:“您最喜欢哪个游戏?”

它存储在ID为1的表1中。对于此问题,表2中有3个选择;表2中有3个选择。分别是ID为1,2和3的“板球”,“足球”,“网球”。

当用户回答此问题时,问题ID和选项ID就像他选择了足球一样存储在第三张表中,表3中的输入是问题ID和选项ID。

如果另一个用户选择相同的选项,则新条目将存储在表3中。

我需要获得表3中每个选项的计数。

考虑有10位用户选择板球,有15位用户选择足球,没有用户选择网球,因此我需要算为10,15,0及其相应的选项ID

表名:问题

--------------------------------
| id |      question            |
--------------------------------
|  1 | which game u like most   |

表名称:选项

------------------------------------------------
| id |  qid  |         option_name               |
------------------------------------------------
| 1  |   1   |          cricket                   |
------------------------------------------------
| 2  |   1   |          football                  |
------------------------------------------------
| 3  |   1   |          tennis                    |
------------------------------------------------

表名称:答案

--------------------------------------------
| id | qid | optionId                       |
--------------------------------------------
| 1  | 1   | 3                              |
---------------------------------------------
| 2  | 1   | 3                               |
----------------------------------------------
| 3  | 1   | 2                               |
----------------------------------------------

上表意味着,有2个人选择网球,有1个人选择足球,而没有人选择板球。所以我需要结果表为

------------------------------------------------------
| id | question                | option_name | count |
------------------------------------------------------
| 1  | which game u like most  | cricket     |   0   |
-------------------------------------------------------
| 2  | which game u like most  | football    |   1   |
-------------------------------------------------------
| 3  | which game u like most  | tennis      |   2    |
-------------------------------------------------------

但是当我尝试时,我没有得到板球的计数,因为没有人选择板球。我必须将板球的计数设为0。有人可以帮助我解决此问题吗?我的SQL代码是

SELECT count(an.optionId) count , op.option_name, q.question from
questions q, options op, answers an where q.id=1
and  q.id=op.qid
and op.id=an.optionId
group by q.question, op.option_name
萨加斯

只需使用LEFT JOINCOALESCE()

SELECT COALESCE(count(an.optionId),0) as count , op.option_name, q.question from
questions q
INNER JOIN options op
 ON(q.id=op.qid )
LEFT OUTER JOIN answers an 
 ON(p.id=an.optionId) 
where q.id=1
group by q.question, op.option_name

请避免使用隐式联接语法(逗号分隔),而仅使用联接的正确语法!LEFT JOIN隐式语法变得更加难以阅读,更容易产生错觉。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何连接多个表进行计数?

来自分类Dev

通过连接表上的计数进行学说搜索

来自分类Dev

使用多个连接进行计数

来自分类Dev

Rails通过连接表获取关联计数

来自分类Dev

连接多个表并计数行时挂起查询

来自分类Dev

通过不使用多个计数进行分组

来自分类Dev

通过不使用多个计数进行分组

来自分类Dev

SQLAlchemy:通过对同一表的多个关系进行计数和排序

来自分类Dev

通过连接多个表获得计数和一个最上面一行的描述

来自分类Dev

通过连接表满足多个WHERE条件

来自分类Dev

MYSQL对带有连接的表进行多次计数

来自分类Dev

连接三个表以进行不同的计数

来自分类Dev

在 Rails 5 中对连接表进行计数和排序

来自分类Dev

如何进行计数查询并连接两个表

来自分类Dev

在连接多个表时列出总数和条件计数

来自分类Dev

MySQL使用连接计数来自多个表的行

来自分类Dev

通过多个关系对实体进行计数和排序

来自分类Dev

如何通过使用JOIN从两个表进行计数

来自分类Dev

如何通过使用JOIN从两个表进行计数

来自分类Dev

对多个表中的行进行计数会导致较大的延迟

来自分类Dev

在SQL中对多个表进行求和和计数

来自分类Dev

对多个表中的行进行计数会导致较大的延迟

来自分类Dev

查询连接表的计数

来自分类Dev

如何通过多个网页进行套接字连接?

来自分类Dev

如何通过多个网页进行套接字连接?

来自分类Dev

从多个表计数

来自分类Dev

从多个表进行计数并在一个查询中缓慢返回所有计数值

来自分类Dev

进行一个查询以连接多个表

来自分类Dev

SQL内部通过一个查询连接多个表