gpt4 book ai didi

mysql - 在 mysql 中的同一个表上包含空行比 LEFT JOIN 更有效的方法?

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

考虑下表:

 ____________________________________
| my_table |
| ID | val_1 | val_2 | val_3 | val_4 |
| 1 | 1 | 1 | 2 | 0 |
| 2 | 1 | 2 | 8 | 1 |
| 3 | 1 | 2 | 9 | 1 |
| 4 | 1 | 2 | 10 | 1 |
| 5 | 1 | 3 | 6 | 1 |
| 6 | 1 | 4 | 8 | 1 |
| 7 | 2 | 1 | 14 | 1 |
| 8 | 2 | 2 | 1 | 0 |
| 8 | 2 | 2 | 8 | 1 |
| 8 | 2 | 3 | 2 | 0 |
------------------------------------

我需要sum(val_3)对于 val_1,val_2 的每个组合哪里val_4=1 ,或0如果没有val_4=1对于给定的val_1,val_2

此查询获得正确的总和分组,但不包括 0空组合的值:

select val_1,val_2,sum(val_3) from my_table where val_4 = 1 group by val_1,val_2 

我可以通过 LEFT JOIN 的组合得到正确的结果同 table 和IFNULL(<condition>,0)

我的数据集上的第一个查询平均需要 0.22 秒。 LEFT JOIN/IFNULL查询平均 0.98 秒。是否有一个查询结构将包含 0值并执行更接近第一个查询的 0.22 秒时间?我的脚本每次调用可能会运行此查询几千次。

这实际上是计算 stdev_samp() 的外部查询的子查询。的val_3 ,所以我确实需要包含 0 个值。

最佳答案

我们可以在不使用任何派生表(子查询)或Left Join的情况下进行条件聚合。

查询

SELECT
val_1,
val_2,
SUM(CASE WHEN val_4 = 1 THEN val_3
ELSE 0
END) AS sum
FROM my_table
GROUP BY val_1, val_2;

结果

| val_1 | val_2 | sum |
| ----- | ----- | --- |
| 1 | 1 | 0 |
| 1 | 2 | 27 |
| 1 | 3 | 6 |
| 1 | 4 | 8 |
| 2 | 1 | 14 |
| 2 | 2 | 8 |
| 2 | 3 | 0 |
<小时/>

View on DB Fiddle

关于mysql - 在 mysql 中的同一个表上包含空行比 LEFT JOIN 更有效的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53577468/

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