首页 > 解决方案 > 如何显示至少进行了两次捐赠的行?

问题描述

我不知道如何以正确的方式使用 Count 或 GROUP By 子句,也无法显示超过 2 次捐赠的行。

我对 COUNT 和 GROUP BY 子句进行了失败的尝试。

insert into DD (Donor_ID, Donation_ID, Donation_Type, Donation, Inventory_ID) values 
   (1, 1, 'Food', 'Oranges', 1); -- **Code to display**
   insert into DD (Donor_ID, Donation_ID, Donation_Type, Donation, Inventory_ID) values 
   (2, 2, 'Currency', 200, 2); -- **Code to display**
   insert into DD (Donor_ID, Donation_ID, Donation_Type, Donation, Inventory_ID) values 
   (2, 3, 'Currency', 300, 2); -- **Code to display**
   insert into DD (Donor_ID, Donation_ID, Donation_Type, Donation, Inventory_ID) values 
   (1, 4, 'Currency', 400, 2); -- **Code to display**
   insert into DD (Donor_ID, Donation_ID, Donation_Type, Donation, Inventory_ID) values 
   (3, 5, 'Currency', 500, 2); -- NOT TOO display

select di.Donor_Name DI, 
    acz.Address_City ACZ, 
    dd.Donation_Type DD, 
    dd.Donation      DD,
    COUNT(*)

from DI di, ACZ acz, DD dd  
where  di.Donor_ID = acz.Address_ID 
AND (acz.Address_City = 'ATHENS' OR acz.Address_City = 'Watkinsville') 
AND di.Donor_ID > 1
GROUP BY di.Donor_Name DI, 
    acz.Address_City ACZ, 
    dd.Donation_Type DD, 
    dd.Donation      DD;

我得到的结果是错误 ORA-00933。我想要的结果是要显示的作为“-- 要显示的代码”的注释代码。

标签: sqloracle

解决方案


您的数据样本似乎缺少 DI 和 DD 之间的连接。

不应为表和别名使用相同的名称(整个 SQL 代码不区分大小写)。

您应该使用显式连接语法(而不是基于 1992 年的旧隐式连接语法where)并且至少可以使用两次捐赠having count(*) > 1

select di.Donor_Name DI, 
    acz.Address_City ACZ, 
    dd.Donation_Type DD, 
    dd.Donation      DD,
    COUNT(*)
from DI 
INNER JOIN ACZ  ON  di.Donor_ID = acz.Address_ID 
        AND (acz.Address_City = 'ATHENS' OR acz.Address_City = 'Watkinsville') 
        AND di.Donor_ID > 1
INNER JOIN  DD  ON DD.Donor_ID =  di.Donor_ID
GROUP BY di.Donor_Name DI, 
    acz.Address_City ACZ, 
    dd.Donation_Type DD, 
    dd.Donation      DD
HAVING count(*) > 1 

推荐阅读