Syntax

幾個 SQL 語法問題

  • November 24, 2016

我有幾個小問題,我寫了一些簡單的例子來澄清它們:

  1. 嵌套聚合是否會從所有組中獲取一個值?像所有組的最小最大值一樣?或最小計數?
Select x, min(max(z))
From y
Group by x

同樣,執行以下操作以獲得所有組的最小計數是否有任何優點,或者第二行是不必要的?

select x, min(count(*))
select x, count(*)
From y
Group by x

如果兩者都無效,您將如何對所有組進行查詢,例如在每個組中取所有最大值中的最小值? 2. 你能在“發件人”裡面做一個查詢嗎?

Select x 
From y natural inner join (select z AS y
                          from foo)
  1. 是否允許from *在 a 之後執行group by
Select x
From y
Group by x
Having avg(x) > (select *
                from *
                where x > 1)

如果沒有,您將如何在 ? 之後對每個組進行查詢group by

注意:這不是 SQL 伺服器的實時版本,只是舊的理論 SQL。

re 1)

使用標準 SQL,唯一的方法是:

select min(cnt)
from (
 select x, count(*) as cnt
 from y
 group by x
) t

re 2)

是的,您可以加入查詢,但您需要給派生表一個別名

Select x 
From y 
 natural join (select z AS y
               from foo) as t;

這假設該表y 有一個列y- 否則自然連接可以使用兩個相同的列。

但總的來說,您應該避免自然連接。改用顯式連接:

select x 
from y 
 join (select z AS y
      from foo
 ) as t on t.y = y.id;

re 3)

不,from *絕不允許。但我不知道你打算用它做什麼。>與(or <or =)一起使用的子選擇必須恰好返回一行和一列,因此您需要以下內容:

Select x
From y
Group by x
Having avg(x) > (select count(*) -- no idea what you would want to do here
                from y
                where x > 1);

如果子選擇返回多於一行,您將需要使用ANY

Select x
From y
Group by x
Having avg(x) > ANY (select x -- still only ONE column allowed
                    from y
                    where x > 1);

引用自:https://dba.stackexchange.com/questions/156299