gpt4 book ai didi

MySQL 计算数据透视表中至少有一条记录的所有记录

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

我正在尝试查看表的一条记录在用于多对多关系的数据透视表上是否至少有一条记录。

餐 table 服务员是:

| ID |  NAME  |
|----|--------|
| 1 | Name A |
| 2 | Name B |
| 3 | Name C |

Attendant_Event 数据透视表具有以下结构

| ID |  attendant_id  |  event_id  |  uuid  |
|----|----------------|------------|--------|
| 1 | 1 | 1 | xxx |
| 2 | 1 | 2 | yyy |
| 3 | 3 | 1 | zzz |
| 4 | 3 | 2 | www |
| 5 | 1 | 3 | xyx |
| 6 | 3 | 3 | rer |

我的查询试图对数据透视表上至少有一条记录的服务员进行计数,但将所有记录计为 1。例如,预期结果将是这样的表格:

| STATUS |  COUNT |
|--------|--------|
| YES | 2 |
| NO | 1 |

这个结果是预期的,因为:

  1. 只有 ID 为 1 和 3 的服务员在 attendant_Event 表中才有记录。这告诉我们数据透视表上有行的服务员数量是 2。
  2. ID 为 2 的话务员没有记录,因此数据透视表中没有记录的话务员数量为 1。

到目前为止,我的查询如下:

SELECT IF(uuid <=> NULL, 'NO', 'YES') as status, count(*) as count FROM attendants att LEFT JOIN attendant_event ae ON ae.attendant_id = att.id GROUP BY status

但这向我展示了这样的结果。

| STATUS |  COUNT |
|--------|--------|
| YES | 6 |
| NO | 1 |

这意味着,计算每一行。如果我们采用前面的示例,id 为 1 和 3 的服务员在数据透视表上都有 3 条记录。所以它给出了 6,而不是我正在寻找的 2。

我做错了什么?

最佳答案

您可能需要先选择相应的服务员 ID 是/否,然后对它们进行计数,如下所示:

SELECT status, count(distinct attendant_id) as count FROM (
SELECT IF(ae.uuid IS NULL, 'NO', 'YES') as status, ae.attendant_id
FROM attendants att LEFT JOIN attendant_event ae ON ae.attendant_id = att.id
GROUP BY ae.attendant_id) x
GROUP BY status

关于MySQL 计算数据透视表中至少有一条记录的所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55680412/

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