gpt4 book ai didi

python - 关键 - 将查询循环转换为 1 个有趣的合并查询

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

我正在尝试将我的简单查询优化为更复杂的查询。

我有三个表

Table 1
a_id info
1 talk
2 talk
3 sleep
4 sit

Table 2
key data_1 data_2 a_id g_id dat_3
1 6.4 3.2 1 1 a
2 5.6 3.5 1 2 a
3 4.6 6.7 1 3 b
4 1.2 2.3 2 4 c
5 0.9 5.6 3 5 c
6 1.1 1.5 4 6 b

Table 3
g_id dat_1 dat_2
1 x t
2 x b
3 y o
4 y t

Psuedo code

#get a_ids from table 1
for each a_id:
extract unique g_id from table 2
for each g_id:
count number of a,b,and c using union from

我已经(在 postgresql 中)使用循环和简单查询实现了上述伪代码。如您所见,我必须运行太多查询。这极大地减慢了这个过程。我如何仅使用 1 个大查询来执行此操作 - 速度要快得多?

示例 - 说话、 sleep 和坐下的循环运行。

对于谈话来说,它会是-
a_ids 将是 1,2。

对于 1,它将找到 1,2,3 作为 g_ids。

对于每个 g_id,它将计算 a、b 和 c 的数量。 数到最后。

所需的输出将是:

info  a_id g_id  a  b  c 

talk 2 3 2 1 1
sleep 1 1 0 0 1
sit 1 1 0 1 0

我是 Postgresql 数据库的新手,正在研究复杂的查询。请在这里帮助我。如果您不喜欢这个问题,请告诉我,我会删除它。不要投票。谢谢!

最佳答案

您可以尝试使用条件聚合函数JOIN

CREATE TABLE Table1(
a_id INT,
info VARCHAR(5)
);

INSERT INTO Table1 values (1,'talk');
INSERT INTO Table1 values (2,'talk');
INSERT INTO Table1 values (3,'sleep');
INSERT INTO Table1 values (4,'sit');


CREATE TABLE Table2(
a_id INT,
g_id INT,
dat_3 VARCHAR(5)
);




INSERT INTO Table2 values (1,1,'a');
INSERT INTO Table2 values (1,2,'a');
INSERT INTO Table2 values (1,3,'b');
INSERT INTO Table2 values (2,4,'c');
INSERT INTO Table2 values (3,5,'c');
INSERT INTO Table2 values (4,6,'b');

查询 1:

SELECT t1.info,
COUNT(DISTINCT t1.a_id) a_id,
COUNT(DISTINCT t2.dat_3) g_id,
sum((dat_3 = 'a')::int) a,
sum((dat_3 = 'b')::int) b,
sum((dat_3 = 'c')::int) c
FROM Table1 t1
INNER JOIN Table2 t2 on t1.a_id = t2.a_id
group by t1.info
order by t1.info desc

Results :

|  info | a_id | g_id | a | b | c |
|-------|------|------|---|---|---|
| talk | 2 | 3 | 2 | 1 | 1 |
| sleep | 1 | 1 | 0 | 0 | 1 |
| sit | 1 | 1 | 0 | 1 | 0 |

注意

  1. sum((dat_3 = 'a')::int) 可以使用 bool to int 然后 sum,如果条件为 true 然后1 否则为 0
  2. sum 条件取决于 dat_3 列。您可以在您的逻辑中动态添加条件。

关于python - 关键 - 将查询循环转换为 1 个有趣的合并查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51850581/

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