gpt4 book ai didi

MySQL Count 函数将两列的结果相乘(应该分别返回每列的计数)

转载 作者:搜寻专家 更新时间:2023-10-30 22:06:19 24 4
gpt4 key购买 nike

我有一张用户表、一张任务表和一张提醒表。我想返回每个用户的任务数和提醒数。当我只计算一个或另一个(提醒或任务)时,我可以让它工作,但是当我在一个查询中计算它们时,由于某种原因它们会彼此相乘。

SQLFiddle:http://www.sqlfiddle.com/#!9/f0d6696/1/0

到目前为止,这是我的查询:

SELECT
users.name,
COUNT(reminders.id),
COUNT(tasks.id)
FROM users
LEFT JOIN reminders on users.id = reminders.id
LEFT JOIN tasks on users.id = tasks.id
GROUP BY users.id

这是我的用户表的样子:

+---------------------------------------+
| ID | Name | Email |
+---------------------------------------+
| 1 | John Smith | jsmith@email.com |
| 2 | Mark Twain | mtwain@books.com |
| 3 | Elon Musk | space-dude@email.com|
+---------------------------------------+

这是我的任务表的样子:

+------------------------------------------------+
| ID | Title | Text | Status |
+------------------------------------------------+
| 1 | Dishes | Kitchen = nasty | incomplete|
| 1 | Library | drop off books | complete |
| 3 | Gym | get swole dude | incomplete|
+------------------------------------------------+

这是我的提醒表的样子:

+------------------------------------+
| ID | Title | Text |
+------------------------------------+
| 1 | Dishes | Kitchen = nasty |
| 2 | Library | drop off books |
| 1 | Gym | get swole dude |
+------------------------------------+

我希望从上述查询中得到以下结果:

+-------------------------------------------+
| Name | Tasks | Reminders |
+-------------------------------------------+
| John Smith | 2 | 2 |
| Mark Twain | 1 | 0 |
| Elon Musk | 0 | 1 |
+-------------------------------------------+

我实际上得到以下信息:

+-------------------------------------------+
| Name | Tasks | Reminders |
+-------------------------------------------+
| John Smith | 4 | 4 | <---2 tasks x 2 reminders?
| Mark Twain | 1 | 0 |
| Elon Musk | 0 | 1 |
+-------------------------------------------+

最佳答案

你得到一个交叉连接,每个任务的每个提醒。

尝试

select 
users.name,
remindercount,
taskcount
FROM users
LEFT JOIN (select id, count(*) as remindercount from reminders group by id) reminders on users.id = reminders.id
LEFT JOIN (select id, count(*) as taskcount from tasks group by id) tasks on users.id = tasks.id

关于MySQL Count 函数将两列的结果相乘(应该分别返回每列的计数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51888523/

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