首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有更好的方法来为多个表编写AVG() SQL查询(或者改进我的代码)

有没有更好的方法来为多个表编写AVG() SQL查询(或者改进我的代码)
EN

Stack Overflow用户
提问于 2020-05-28 22:37:11
回答 1查看 28关注 0票数 0

对于管理大量数据的sql查询,我还是个新手,我正在努力提高请求的性能。我的问题是,我有多个具有相同结构的不同名称的表,因此我必须从所有表中提取temp的值,以便稍后使用。

我目前正在使用以下代码:

代码语言:javascript
复制
//these value changes on each request, here are some examples to help you understand
$ano_desde = 2019; 
$mes_hasta = 4;
$id_t = 1123;
//

for ($ano = $ano_desde; $ano <= $ano_hasta; $ano++) {
            for ($mes = $mes_hasta; $mes <= 12; $mes++) {


                $sql = " SELECT AVG(temp) FROM table".$ano."_".$mes." WHERE id_t = $id_t";

                //HERE I WOULD SEND THE QUERY TO MY DB AND SAVE RESP ON $TEMP

                $temp = queryResp;

                if ($temp != 0) {
                    $temps[] = floatval($temps);
                }
            }
        }

这样做的工作,但它的命中我的响应4到5秒,我很乐意改善它,无论是在php代码或在我的查询。

提前感谢,我为任何拼写错误道歉,因为英语不是我的第一语言。

EN

回答 1

Stack Overflow用户

发布于 2020-05-28 23:07:34

我认为你正在寻找的是sql,它看起来像是连接所有的表,然后做一个avg。(如果您对每个表执行此操作,您将获得平均值。

代码语言:javascript
复制
SELECT AVG(temp) from (
SELECT temp FROM table.ano._mes1 WHERE id_t = id_t
UNION ALL
SELECT temp FROM table.ano._mes1 WHERE id_t = id_t
UNION ALL
SELECT temp FROM table.ano._mes1 WHERE id_t = id_t
) a

实际上,您也可以这样做,以获得更好的性能

代码语言:javascript
复制
SELECT s/c avgtmp from (
SELECT sum(temp) s, count(temp) c FROM table.ano._mes1 WHERE id_t = id_t
UNION ALL
SELECT sum(temp) s, count(temp) c FROM table.ano._mes1 WHERE id_t = id_t
UNION ALL
SELECT sum(temp) s, count(temp) c FROM table.ano._mes1 WHERE id_t = id_t
) a
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62067428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档