gpt4 book ai didi

mysql - 选择单个表中的数据 1 :Many relationship

转载 作者:行者123 更新时间:2023-11-29 20:49:14 24 4
gpt4 key购买 nike

我有一个包含 67 列和大约 36,000 行的表,我需要根据其中两列运行 SELECT。

重要的列是FINANCIAL_ACCOUNT_ID、EVENT_DESCRIPTION。

FINANCIAL_ACCOUNT_ID 是每个帐户的唯一编号,但在表中可能不是唯一的。事件描述并不唯一。事件描述可以包含“事件 1”“事件 2”“事件 3”等。

所以表格可能如下所示:

TABLE
+----------------------+-------------------+-------------+
| FINANCIAL_ACCOUNT_ID | EVENT_DESCRIPTION | OTHER_STUFF |
+----------------------+-------------------+-------------+
| 1121 | Event 1 | n/a |
| 107401 | Event 2 | n/a |
| 256483 | Event 1 | n/a |
| 1121 | Event 3 | n/a |
| 107401 | Event 1 | n/a |
| 363586 | Event 1 | n/a |
| 546875 | Event 1 | n/a |
| 546875 | Event 2 | n/a |
+----------------------+-------------------+-------------+


RESULT
+----------------------+-------------------+-------------+
| FINANCIAL_ACCOUNT_ID | EVENT_DESCRIPTION | OTHER_STUFF |
+----------------------+-------------------+-------------+
| 107401 | Event 2 | n/a |
| 107401 | Event 1 | n/a |
| 546875 | Event 1 | n/a |
| 546875 | Event 2 | n/a |
+----------------------+-------------------+-------------+

如果存在同时包含“事件 1”和“事件 2”的金融帐户 ID,我需要返回的是整行。

我尝试过将WITH子句与内部联接相结合...在我最近的尝试中,我添加了一个计数(financial_account_id),例如:

 select FINANCIAL_ACCOUNT_ID, EVENT_DESCRIPTION, COUNT(FINANCIAL_ACCOUNT_ID)
FROM master
group by FINANCIAL_ACCOUNT_ID
HAVING COUNT(FINANCIAL_ACCOUNT_ID) >1;

但是,以下是我在该 select 语句中看到的结果:

Financial_Account_ID | Event_Description | COUNT(Financial_Account_ID)
107401 | Event 2 | 2
546875 | Event 1 | 2

(我说我需要整行,但是一旦返回正确的结果,我就可以过滤掉不需要的无关列。)

对于这样的 SQL 查询应该是什么样子有什么帮助吗?详细信息:mariadb 10,数据库名称:JuneEvents,表名称:master我还在 MS-SQL 2012 Express 数据库中获得了一份副本

编辑:@Tim - 抱歉,我需要将每个帐户与“事件 1”和“事件 2”匹配,抛出事件 3 以及任何其他可能存在的帐户。这清楚了吗?

解决方案:我使用 @Gordon 的第二个查询,以 JOIN 作为起点,最终得到如下所示的最终查询:(注意:现在有一些额外的字段,但我在初始查询返回正确的结果后添加了它们初始数据集。)

SELECT t.financial_account_id, t.event_description, t.sold_quantity, t.paid_amount
FROM master t JOIN
(SELECT financial_account_id
FROM master t
WHERE event_description IN ('Event 1', 'Event 2')
GROUP BY financial_account_id
HAVING COUNT(DISTINCT event_description) = 2
) tt
ON tt.financial_account_id = t.financial_account_id
WHERE (event_description IN ('Event 1', 'Event 2') AND (sold_quantity > 0));

最佳答案

要获取包含这两个事件的帐户,请使用:

SELECT financial_account_id
FROM master t
WHERE event_description IN ('Event 1', 'Event 2')
GROUP BY financial_account_id
HAVING COUNT(DISTINCT event_description) = 2;

然后要获取原始行,请使用JOIN:

SELECT t.*
FROM master t JOIN
(SELECT financial_account_id
FROM master t
WHERE event_description IN ('Event 1', 'Event 2')
GROUP BY financial_account_id
HAVING COUNT(DISTINCT event_description) = 2
) tt
ON tt.financial_account_id = t.financial_account_id;

关于mysql - 选择单个表中的数据 1 :Many relationship,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38194290/

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