Syntax
幾個 SQL 語法問題
我有幾個小問題,我寫了一些簡單的例子來澄清它們:
- 嵌套聚合是否會從所有組中獲取一個值?像所有組的最小最大值一樣?或最小計數?
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)
- 是否允許
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);