mysql 在Sub-subselect where子句的列中使用计算值

0dxa2lsx  于 2023-01-29  发布在  Mysql
关注(0)|答案(1)|浏览(81)

我希望这不是一个口是心非,但我还没有能够找到这样的例子在给定的答案。我希望熟练的sql家伙将能够帮助我很容易,因为问题是最有可能是我。
请注意,我真的很努力地去理解系统中提到的类似问题,但是没有一个问题像我认为我需要的那样把我推到脸上。请理解,我对SQL很弱,所以也许这是一个正确的答案。
我们有两张table:
azure_票证:|票证ID|系统标签|地位||- ------|- ------|- ------||小行星1209|捷克共和国发布日期:2023年1月19日;IT发布日期2023年1月24日|放行||小行星121|捷克共和国发布日期:2023年1月19日;制造商_发布日期_2023年1月24日|关闭|
Azure票证历史版本eav:|票证ID|地位|天数_计数||- ------|- ------|- ------||小行星1209|舞台上|十二||小行星121|舞台上|二十五|
现在,第一个表获得了ticket_id和system_tags(当然还有更多列,但对于这个计算来说,这是必需的)。
我需要的是一个平均天数为所有票与给定的系统标签(仅为单个国家,在这种情况下只有捷克共和国)的状态"舞台上"。
我们正在使用元数据库,所以我能够爬到下面的SQL我的方式:

SELECT 
    `Table A`.`Tags A1` AS                  `Tags A`, 
    `Question 172`.`Azure System Tags` AS   `Tags B`, 
    `Question 172`.`Days On Stage` AS       `Days On Stage`
FROM (
    SELECT DISTINCT regexp_substr(system_tags, concat({{country}}, '_released_[^;]*')) as "Tags A1"
    FROM            azure_tickets 
    WHERE           azure_tickets.system_tags LIKE concat("%", {{country}}, "_released_%")
    ) 
    `Table A`
    
    LEFT JOIN (
        SELECT 
            regexp_substr(`Table B`.`system_tags`, concat({{country}}, '_released_[^;]*')) AS `Azure System Tags`,
            SUM(`Table A`.`days_count`) / COUNT(`Table A`.`days_count`) AS                    `Days On Stage`
        FROM (
            SELECT  `azure_tickets_history_releases_eav`.`ticket_id`, 
                    `azure_tickets_history_releases_eav`.`days_count`
            FROM    `azure_tickets_history_releases_eav`
            WHERE   `ticket_id` IN (
                        SELECT  `azure_tickets`.`ticket_id`
                        FROM    `azure_tickets`
                        WHERE   `azure_tickets`.`system_tags` LIKE concat("%", 'CZ_released_2022/12/14', "%") AND 
                                `azure_tickets`.`state` IN ("For release", 'Closed') AND
                                `azure_tickets`.`team_project` NOT IN ('mobile-team','cloud-infrastructure','bart-team','ipf-team','integration-backoffice-team','web-measurements-team','devops-team','ecommerce-sla','qaa-team')) AND
                    `country` = {{country}} AND
                    `status` = "On Stage"
                    )
                    `Table A`
                
        JOIN `azure_tickets` AS `Table B` ON `Table A`.`ticket_id` = `Table B`.`ticket_id`
        ) 
        
        `Question 172` ON `Table A`.`Tags A1` = `Question 172`.`Azure System Tags`

几乎给了我想要的。看起来像这样:|标签A|标签B|舞台天数||- ------|- ------|- ------||捷克共和国发布日期2022年12月14日|捷克共和国发布日期2022年12月14日|二十五点七四分||捷克共和国发布日期2022年5月12日||||捷克共和国发布日期2022年7月25日||||捷克共和国发布日期2022年7月28日|||
正如您在第23行所看到的,有一个带有硬编码标记的where子句(CZ_released_2022/12/14)。我需要的是将此硬编码标记替换为列值Tag A(或B,无所谓),但是无论我如何尝试更新sql,我都会在子选择中得到未知列,例如"Unknown column 'Table A. Tags A1' in 'where clause'"。
我不确定是否需要前面的查询(即问题172,我可以按部分回答,但我认为原则有问题,而不是子查询)。
我将非常感谢您的输入如何继续与此,我的想法,因为我不使用SQL和元数据库太频繁。

ovfsdjhp

ovfsdjhp1#

所以我错了,我以为这个问题很容易解决。下面是我解决这个问题的方法。我在后端计算了所有数据。这是一个对我来说也对你来说是一个智慧-如果计算太复杂,在后端简化它。

相关问题