我使用Postgresql 9.4解决了这个问题,我需要程序只显示sum(v.price) > 1000
,但是如果我把total > 1000
放在条件告诉我的情况下,那就是{not}&t存在并且不允许我放sum(v.price)
,因为在本节中不可能执行此类操作。
创建表是:
CREATE TABLE PATIENT
(
Pat_Number INTEGER,
Name VARCHAR(50) NOT NULL,
Address VARCHAR(50) NOT NULL,
City VARCHAR(30) NOT NULL,
CONSTRAINT pk_PATIENT PRIMARY KEY (Pat_Number)
);
CREATE TABLE VISIT
(
Doc_Number INTEGER,
Pat_Number INTEGER,
Visit_Date DATE,
Price DECIMAL(7,2),
Turn INTEGER NOT NULL,
CONSTRAINT Visit_pk PRIMARY KEY (Doc_Number, Pat_Number, Visit_Date),
CONSTRAINT Visit_Doctor_fk FOREIGN KEY (Doc_Number) REFERENCES DOCTOR(Doc_Number),
CONSTRAINT Visit_PATIENT_fk FOREIGN KEY (Pat_Number) REFERENCES PATIENT(Pat_Number)
);
这是我遇到问题的陈述:
SELECT
p.name, p.address, p.city, sum(v.price) as total
FROM
VISIT v
JOIN
PATIENT p ON p.Pat_Number = v.Pat_Number
WHERE
Date(Visit_Date) < '01/01/2012'
GROUP BY
p.name, p.address, p.city, p.Pat_Number, v.Pat_Number
ORDER BY
total DESC;
我该怎么做?
答案 0 :(得分:3)
在Having sum(v.price) > 1000
之后添加group by
:
SELECT
p.name, p.address, p.city, sum(v.price) as total
FROM
VISIT v
JOIN
PATIENT p ON p.Pat_Number = v.Pat_Number
WHERE
Date(Visit_Date) < '01/01/2012'
GROUP BY
p.name, p.address, p.city, p.Pat_Number, v.Pat_Number
HAVING SUM(v.price) > 1000
ORDER BY
total DESC;
答案 1 :(得分:1)
查询的WHERE
部分中的条件适用于每一行。你不能在那里使用聚合函数。对于名为HAVING
的组,有类似的功能。 HAVING
与WHERE
类似,但每个组都应用条件。因此,向查询添加HAVING sum(v.price) > 1000
将仅过滤那些价格总和高于1000的组。
答案 2 :(得分:0)
我们通常使用一个有子句的组。试试这个:
SELECT p.name, p.address, p.city, sum(v.price) as total
FROM VISIT v join PATIENT p on p.Pat_Number = v.Pat_Number
where Date(Visit_Date)<'01/01/2012'
group by p.name, p.address, p.city, p.Pat_Number, v.Pat_Number
having sum(v.price) > 1000
order by total DESC;
请告诉我这是否适合您。
答案 3 :(得分:0)
尝试使用条款来检查总和(v.price)&gt; 1000。因为这里sum是group by子句的聚合函数。所以为了比较&#34; sum(v.price)&#34;,你应该使用having子句。所以使用这个sql命令
SELECT p.name, p.address, p.city, sum(v.price) as total
FROM VISIT v join PATIENT p on p.Pat_Number = v.Pat_Number
where Date(Visit_Date)<'01/01/2012'
group by p.name, p.address, p.city, p.Pat_Number, v.Pat_Number
having sum(v.price) > 1000
order by total DESC;
如果您想了解有关having子句的更多信息,请访问w3schools.com并查看sql部分。