1. ホーム
  2. sql

[解決済み] SQL WHERE句の集計機能

2023-05-14 10:46:31

質問

大学でのテストで、集計関数を SQL WHERE 節で集約関数を使用することは可能ですか?

私はいつもこれは不可能だと考えており、それがどのように可能であるかの例も見つけることができません。しかし、私の答えはfalseとマークされました。 WHERE . また、それが可能でない場合、それが記述されている仕様へのリンクを取得するのは良いことだと思います。

どのように解決するのですか?

DBMS について言及していません。MS SQL-Server を使用していると仮定して、自明な T-SQL エラーメッセージを発見しました。

凝集素は、WHERE 節に表示されない場合があります。 WHERE 句に表示することはできません。 サブクエリに含まれない限り、WHERE句に含めることはできません。 または選択リストに含まれるサブクエリで、集約される列が外部参照である場合を除き が外部参照でない限り、WHERE句に表示することはできません。

http://www.sql-server-performance.com/


そして、サブクエリで可能であることの例。

すべての顧客と、5件以上の注文がある人の最小の注文を表示する(その他の人はNULL)。

SELECT a.lastname
     , a.firstname
     , ( SELECT MIN( o.amount )
         FROM orders o
         WHERE a.customerid = o.customerid
           AND COUNT( a.customerid ) >= 5
        )
        AS smallestOrderAmount
FROM account a
GROUP BY a.customerid
       , a.lastname
       , a.firstname ;


UPDATEです。

上記はSQL-ServerとMySQLの両方で実行されますが、私が期待した結果を返しません。次のものはより近いです。私は、フィールド customerid フィールドが、最初のケースでは外部テーブルのPRIMARY KEYであり、2番目のケースではPRIMARY KEYでないことです。

5件以上の注文がある顧客には、すべての顧客IDと注文件数を表示します(その他の顧客はNULL)。

SELECT o.customerid
     , ( SELECT COUNT( o.customerid )
         FROM account a
         WHERE a.customerid = o.customerid
           AND COUNT( o.customerid ) >= 5
        )
        AS cnt
FROM orders o
GROUP BY o.customerid ;