我可以在嵌套查询中使用 lower 吗?

Can I use lower on a nested query?

我已经有一段时间没用了 SQL 但又弄脏了我的手。我在尝试小写字符串列表时遇到错误。

我有两个查询想合并为一个,每个查询都独立运行:

    select ticker from "General" g4 where industry = (select industry from "General" g3 where g3.ticker = 'IBM.US');
ticker
NSIT.US
SNX.US
NRILY.US
WIT.US

此 returns 基于代码变量行业的代码列表(在本例中为与 IBM 处于同一行业的所有公司)

那我想得到当年每家公司的平均收入:

select year, AVG(revenue) AS AVGrevenue  from revenue r where lower(ticker) = lower('ibm.us') GROUP BY c.year;
works awesome:

2013    2750040.000000000000
2014    3675122.000000000000
2015    3455017.000000000000
2016    2140280.000000000000
2017    3401381.000000000000

但是当我组合它时,它不起作用:

SQL 查询执行期间发生错误

select year, AVG(revenue) AS AVGrevenue  
from revenue r 
where lower(ticker) = lower(

select ticker from "General" g4 where industry = (select industry from "General" g3 where g3.ticker = 'IBM.US')

) 
GROUP BY r.year;

我收到这个错误:

Reason:
SQL Error [42601]: ERROR: syntax error at or near "select"
  Position: 635

我做错了什么?

试试这个。你应该把 lower() 放在 select.

里面
select year, AVG(revenue) AS AVGrevenue  
from revenue r 
where lower(ticker) = 
(
select lower(ticker) from "General" g4 where industry = (select industry from "General" g3 where g3.ticker = 'IBM.US')
)
GROUP BY r.year;

可以 ,但我建议将 lower() 移动到 查询中:

where lower(ticker) = (select lower(g4.ticker)
                       from "General" g4
                       where industry = (select industry from "General" g3 where g3.ticker = 'IBM.US')

                       ) 

如果您希望子查询成为 lower() 的参数,这也是允许的,您需要额外的括号级别:

where lower(ticker) = lower( (select g4.ticker
                              from "General" g4
                              where industry = (select industry from "General" g3 where g3.ticker = 'IBM.US')

                             ) 
                           ) 

一组括号用于函数调用。第二个是相关子查询。