SQL错误:正在执行操作

SQL错误:正在执行操作,sql,postgresql,Sql,Postgresql,我需要编写一个sql脚本,它必须显示所有man客户机,其最大收入是最低收入的两倍 SELECT DISTINCT customer_rk, max(monthly_income_amt), min(monthly_income_amt), max(monthly_income_amt) / min(monthly_income_amt) AS income_ratio FROM asql.individual_customer WHERE middle_nm LIKE '%В

我需要编写一个sql脚本,它必须显示所有man客户机,其最大收入是最低收入的两倍

SELECT
  DISTINCT
  customer_rk,
  max(monthly_income_amt),
  min(monthly_income_amt),
  max(monthly_income_amt) / min(monthly_income_amt) AS income_ratio
FROM asql.individual_customer
WHERE middle_nm LIKE '%ВИЧ'
GROUP BY customer_rk
HAVING income_ratio > 2;
middle_nm,如“%bбЧ”
-用于按中间名对男性进行排序(俄语要求)

以下是表格的外观:

A收到此类错误:

错误:“收入比率”列不存在(第6行)


我做错了什么?

而不是
收入比率
写在have子句中为
max(monthly\u income\u amt)/min(monthly\u income\u amt)>2


另外,当您分组时,
distinct
没有意义。

而不是
收入比率
将have子句写为
max(monthly\u income\u amt)/min(monthly\u income\u amt)>2


另外,
distinct
在分组时没有意义。

需要修改having子句,如下所示

SELECT
      DISTINCT
      customer_rk,
      max(monthly_income_amt),
      min(monthly_income_amt),
      max(monthly_income_amt) / min(monthly_income_amt) AS income_ratio
    FROM asql.individual_customer
    WHERE middle_nm LIKE '%ВИЧ'
    GROUP BY customer_rk
    HAVING (max(monthly_income_amt) / min(monthly_income_amt)) > 2

您的having条款需要修改如下

SELECT
      DISTINCT
      customer_rk,
      max(monthly_income_amt),
      min(monthly_income_amt),
      max(monthly_income_amt) / min(monthly_income_amt) AS income_ratio
    FROM asql.individual_customer
    WHERE middle_nm LIKE '%ВИЧ'
    GROUP BY customer_rk
    HAVING (max(monthly_income_amt) / min(monthly_income_amt)) > 2

将查询包装到派生表中。然后,您可以在WHERE子句中输入收入比率:

select * from
(
    SELECT
      customer_rk,
      max(monthly_income_amt),
      min(monthly_income_amt),
      max(monthly_income_amt) / min(monthly_income_amt) AS income_ratio
    FROM asql.individual_customer
    WHERE middle_nm LIKE '%ВИЧ'
    GROUP BY customer_rk
) dt
where income__ratio > 2;

将查询包装到派生表中。然后,您可以在WHERE子句中输入收入比率:

select * from
(
    SELECT
      customer_rk,
      max(monthly_income_amt),
      min(monthly_income_amt),
      max(monthly_income_amt) / min(monthly_income_amt) AS income_ratio
    FROM asql.individual_customer
    WHERE middle_nm LIKE '%ВИЧ'
    GROUP BY customer_rk
) dt
where income__ratio > 2;

为什么选择DISTINCT?GROUP BY不返回重复项。为什么选择DISTINCT?GROUP BY不返回重复项。