【问题标题】:Use calculated value in column in sub-subselect where clausole in Metabase在元数据库中的子选择中使用列中的计算值
【发布时间】:2023-01-27 02:24:22
【问题描述】:

我希望这不是口是心非,但是我无法在给定的答案中找到这样的例子。而且我希望熟练的 sql 人员能够轻松帮助我,因为问题很可能是我。

请注意,我真的很努力地尝试理解系统提到的类似问题,但是没有一个人认为我需要,所以他们没有把我推到脸上。请理解我对 SQL 很弱,所以也许这是一个正确的答案。

让我们有两个表:

azure_tickets: | ticket_id |系统标签 |状态 | | ------ | -------------- | ------ | | 1209 | CZ_released_2023/01/19; IT_released_2023/01/24|发布 | | 1210 | CZ_released_2023/01/19; HU_released_2023/01/24|关闭 |

azure_tickets_history_releases_eav: | ticket_id |状态 |天数 | | ------ | -------------- | ------ | | 1209 |在舞台上| 12 | | 1210 |在舞台上 | 25 |

现在第一个表得到了我的 ticket_id 和 system_tags(当然那里有更多的列,但是对于这个计算它是需要的)。

我需要的是具有给定 system_tag(仅适用于单个国家/地区,在本例中仅 CZ)且状态为“On Stage”的所有门票的平均天数。

我们正在使用元数据库,因此我能够爬上以下 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 |舞台上的日子 | | ------ | -------------- | ------ | | CZ_released_2022/12/14 |CZ_released_2022/12/14 | 25.74 | | CZ_released_2022/05/12 | | | | CZ_released_2022/07/25 | | | | cz_released_2022/07/28 | | |

正如您在第 23 行看到的,有一个带有硬编码标签 (CZ_released_2022/12/14) 的 where 子句。我需要的是将这个硬编码标签替换为列值标签 A(或 B,这无关紧要),但是无论我如何尝试更新 sql,我都会在子选择中得到未知列,例如“Unknown column 'Table A.在'where子句'中标记A1'”。

我不确定是否需要前面的查询(即问题 172,我可以 per parte ,但我认为 principe 有问题,而不是子查询)。

我非常感谢您输入如何继续进行此操作,我没有想法,因为我不经常使用 sql 和元数据库。

【问题讨论】:

    标签: mysql metabase


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-07
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-02
      • 1970-01-01
      相关资源
      最近更新 更多