gpt4 book ai didi

mysql - 通过加入多个表来计算

转载 作者:行者123 更新时间:2023-11-29 06:11:43 25 4
gpt4 key购买 nike

我有3张 table

1)question  
2)options
3)answers

表 1 包含多项选择题列表。表 2 包含问题的多项选择。

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

它存储在表1中,id为1。这道题在表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 |
------------------------------------------------

表名:answers

--------------------------------------------
| 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 |
-------------------------------------------------------

但是当我尝试时,我没有得到 cricket 的计数,因为没有人选择 cricket。我必须得到 cricket 的计数为 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 的隐式语法变得更难阅读,更容易出错。

关于mysql - 通过加入多个表来计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37920280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com