【发布时间】: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 和元数据库。
【问题讨论】: