HAVING
SQL sorgularında kullanmak GROUP BY
için, sütun adlarını toplamak için bir a olmalı mı?
HAVING
Bir GROUP BY
SQL sorgusu olmadan kullanmanın mümkün olduğu özel durumlar var mı?
Aynı anda birlikte var olmak zorunda mı?
HAVING
SQL sorgularında kullanmak GROUP BY
için, sütun adlarını toplamak için bir a olmalı mı?
HAVING
Bir GROUP BY
SQL sorgusu olmadan kullanmanın mümkün olduğu özel durumlar var mı?
Aynı anda birlikte var olmak zorunda mı?
Yanıtlar:
Yok hayır.
Oracle'da şu sorgunun işe yaradığı gerçeğinin kanıtladığı gibi bir arada bulunmaları gerekmiyor:
select * from dual having 1 = 1;
Benzer şekilde, PostgreSQL'de aşağıdaki sorgu çalışır:
select 1 having 1 = 1;
Yani having
gelmez gerektirir group by
.
Yaşıyor uygulanan sonra toplama evresinde ve toplu sonuçları filtrelemek istiyorsanız kullanılmalıdır. Yani tam tersi doğru değildir ve aşağıdakiler işe yaramaz:
select a, count(*) as c
from mytable
group by a
where c > 1;
Sen değiştirmeniz gerekiyor where
ile having
aşağıdaki gibi bu durumda:
select a, count(*) as c
from mytable
group by a
having c > 1;
NB Aşağıdaki sorgu formu da çalışacaktır:
select *
from (
select a, count(*) as c
from mytable
group by a
)
where c > 1;
Kullanmanın having
bu son sorgunun kısa bir sürümü olduğunu görebilirsiniz .
Özet olarak, having
uygulandığı sonragroup by
faz ise where
uygulanır öncegroup by
faz.
select 1 having count(*) = 1;
henüz kavramadığım aşağıdaki yapıya izin veriyor .
SELECT 1 AS id, 'Colin' AS name;
verirken , Oracle gibi diğerleri özel bir dual
masaya sahipler . Bu sözdizimlerinden herhangi birinin ANSI / ISO SQL (gerekli FROM
) olduğunu sanmıyorum .
from
atıfta bulunmak istemedim . Muhtemelen fıkradaki tüm sütunların üzerinde toplanmaktadır . count(*)
having
select
Grupları filtrelemek için kullanılır.
yan tümce satırları süzmek için kullanılır.
having
olan uygulanan çekiş faz kadar sonra kullanılabilir filtre grupları.
GROUP BY deyiminin yokluğunda, sorgu tüm ilişkiyi bir grup olarak kabul eder.
Örneğin
select count(*)
from dual
having count(*) > 5;
SELECT MIN(a) AS mina, MAX(a) As maxa FROM mytable HAVING MIN(a) < MAX(a);