【问题标题】:Divide one table by another table created in the same query将一个表除以在同一查询中创建的另一个表
【发布时间】:2022-11-24 03:43:12
【问题描述】:

我有以下 SQL 查询:

SELECT `NeighbourhoodName`,
count(NAME) as `Number of Parks`,
sum(CASE 
    WHEN `parks`.`Advisories` = 'Y' THEN 1
    ELSE 0 
END) as Advisories,
FROM parks
GROUP BY `NeighbourhoodName`;

在代码的第二行,我创建了一个名为“Number of Parks”的列。我希望下一列(建议)中的所有值除以“公园数量”中的值。但是,当我尝试像这样在列之后插入除法语句时:

SELECT `NeighbourhoodName`,
count(NAME) as `Number of Parks`,
sum(CASE 
    WHEN `parks`.`Advisories` = 'Y' THEN 1
    ELSE 0 
END)/`Number of Parks` as Advisories
FROM parks
GROUP BY `NeighbourhoodName`;

我收到以下错误:

Unknown column, `Number of Parks` in field list.

如何在执行此除法的同时仍将其保留在一个查询中?

【问题讨论】:

  • 您不能在同一个 select 语句中使用您用来命名字段的别名,要么将其设为子查询,要么只是在分区中重复计数。
  • 我不能在除法中重复计数,因为除法需要在 groupby 语句之后完成

标签: mysql sql database datatable mysql-workbench


【解决方案1】:

您需要使用外部查询来进行除法。

SELECT `NeighbourhoodName`,
       `Number of Parks`,
        Advisories/`Number of Parks` as Advisories
FROM    ( SELECT `NeighbourhoodName`,
                 count(NAME) as `Number of Parks`,
                 sum( CASE  WHEN `parks`.`Advisories` = 'Y' THEN 1 ELSE 0 END ) as Advisories
          FROM parks
          GROUP BY `NeighbourhoodName`
         ) as tbl;

Problems with Column Aliases

可以在查询选择列表中使用别名来为列提供一个 不同的名字。您可以在 GROUP BY、ORDER BY 或 HAVING 中使用别名 引用列的子句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    相关资源
    最近更新 更多