3

以下のように、データベースに 2 つのテーブルがあります。

CUSTOMER (
  ID integer Generated Always As Identity,
  FIRSTNAME varchar(32) not null,
  LASTNAME varchar(32) not null,
  PHONENUMBER varchar(11) not null,
  ADDRESS varchar(225),
primary key (id)
);

APP.ORDERS (
  ID integer not null default AUTOINCREMENT: start 1 increment 1,
  CUSTOMER_ID integer References Customer(ID) ,
  EMPLOYEEID integer References Employee(ID),
  DATEOFDELIVERY date,
  primary key (id),
); 

以下のようにこの2つのテーブルに参加しようとすると、すべて問題ありません。

 SELECT CUSTOMER_ID,firstname,LASTNAME,Address,phoneNumber From APP.Customer 
 INNER JOIN APP.Orders ON customer.ID = customer_ID 
 WHERE ORDERS.dateOfDelivery Between '2012-09-01' AND '2012-11-11'

しかし、以下のように集計関数を使用すると、エラーが発生します:

SELECT Count(CUSTOMER_ID),firstname,LASTNAME,Address,phoneNumber 
From APP.Customer                         
INNER JOIN APP.Orders ON customer.ID = customer_ID 
WHERE ORDERS.dateOfDelivery Between '2012-09-01' AND '2012-11-11' ;

エラー:

[2012-07-20 08:07:04] [42Y35][30000] Column reference 'FIRSTNAME' is invalid. When the SELECT list contains at least one aggregate then all entries must be valid aggregate expressions.  

上記の最後のコードを Orders.Count(CUSTOMER_ID) に変更してデータベースに正しいテーブルを伝えようとしましたが、Orders という名前のスキーマがないというエラーが発生したため、APP.Orders.Count(CUSTOMER_ID) に変更しましたが、問題を解決することはありません。エラー :Schema 'ORDERS' does not exist

更新中の質問:

私はその非常に単純な Query Like を考え出します:

SELECT COUNT(*),ID FROM Orders

このエラーが発生します:

[2012-07-20 09:01:50] [42Y35][30000] Column reference 'ID' is invalid. When the SELECT list contains at least one aggregate then all entries must be valid aggregate expressions. 

したがって、集計関数と単純な列名の両方を一緒に使用することはできないことを意味しますが、同等のクエリで期待される出力をどのように提供するのだろうか? 何か案が?

4

3 に答える 3

2

これを試して

SELECT CUSTOMER_ID,Count(CUSTOMER_ID),firstname,LASTNAME,Address,phoneNumber 
From APP.Customer                         
INNER JOIN APP.Orders ON customer.ID = customer_ID 
WHERE ORDERS.dateOfDelivery Between '2012-09-01' AND '2012-11-11' 
GROUP BY CUSTOMER_ID,firstname,LASTNAME,Address,phoneNumber 
于 2012-07-20T03:56:03.730 に答える
0

derby データベースでの同等のクエリは次のとおりです。

SELECT customer.firstName As FirstName ,
       customer.lastName AS LastName,
       customer.phoneNumber AS Telephone,
       customer.address AS Address, 
       (SELECT COUNT(OrderID) FROM Orders)  
  FROM Customer join Orders On orders.customer_ID = customer.id WHERE orders.dateOfDelivery Between '2012-09-01' And '2012-11-11'

実はこのデータベースは、他のデータベースのように集計関数と列名を同時に含むクエリを実現できません。私が言及した同等のクエリは同じ出力を提供しますが、http://old.nabble.com/Nested-query-in-conjunction-with-ordering---unreasonably-slow-td15259785.htmlによると、そのパフォーマンスはそうではありません良いです。Bryan Pendleton が言及したクエリも、このクエリと真に同等です。

于 2012-07-20T17:34:26.090 に答える