我有以下表创建脚本:
CREATE TABLE assetcost(
assettype VARCHAR(20) PRIMARY KEY,
rentamt INT
);
CREATE TABLE furnishitem(
itemid VARCHAR(4) PRIMARY KEY CHECK(itemid LIKE 'I%'),
description VARCHAR(30),
availablesets INT,
assettype VARCHAR(25),
specialCharge CHAR(1) CHECK(specialcharge IN ('Y','N')),
FOREIGN KEY(assettype) REFERENCES assetcost(assettype)
);
CREATE TABLE custdetail(
custid VARCHAR(5) PRIMARY KEY CHECK(custid LIKE 'C%'),
custname VARCHAR(30)
);
CREATE TABLE transaction(
transid INT UNIQUE,
custid VARCHAR(5) ,
itemid VARCHAR(4),
sets INT,
days INT,
amount INT,
returned char(1) Check (returned in('Y','N')),
FOREIGN KEY(custid)REFERENCES custdetail(custid),
FOREIGN KEY(itemid)REFERENCES furnishitem(itemid)
);
我在编写查询时遇到错误,以显示已经/已支付最低总金额的客户的客户和客户名称,无论退回的项目如何。
我的查询是:
select t.custid,c.custname
-> from transaction t inner join custdetail c
-> on t.custid=c.custid
-> group by t.custid
-> having sum(amount)=(select min(sum(amount) from transaction group by custid);
答案 0 :(得分:1)
您可以以更优雅的方式解决此问题,但快速解决您的问题将是:
SELECT t.custid, c.custname
FROM TRANSACTION t
INNER JOIN custdetail c ON t.custid = c.custid
GROUP BY t.custid
HAVING sum(amount) = (
SELECT sum(amount)
FROM TRANSACTION
GROUP BY custid
ORDER BY 1 ASC
LIMIT 1
);
你不能一次性min(sum(amount))
。这种方法可以获得具有最小值的custid总和的行。