为什么我的Count语句返回0行



我有这个postgresql语法

CREATE TABLE Testing (
salesID integer,
datePO date,
empID char(10),
saleDate date
);

INSERT INTO Testing(salesID, datePO, empID, saleDate) VALUES
('11991111', NULL, '234510', '2020-08-20'),
('11992222', NULL, '234510', '2020-08-21'),
('11994444', NULL, '234510', '2020-08-21'),
('86432181', NULL, '841321', '2020-08-25');

我想运行这个语句

Select
salesID
,datePO
,empId
,saleDate
From Testing
Where saleDate between '2020-08-01' and '2020-08-30'
GROUP BY salesID, datePO, empId, saleDate
Having Count(empID) > 1

但我得到了返回的CCD_ 1结果。这让我很困惑,因为正如您所看到的,Insert的前三行应该返回,因为它们符合标准。我需要更改什么才能返回这些行?

如果它有帮助的话,这里是我的小提琴https://www.db-fiddle.com/f/sFN1GEEhCh7f6wcFreukhS/0

您有一个group by,所以您的查询是检查group by中的四个键在哪里相同。

它们唯一地标识每一行,因此没有一个组的行数超过一行。

你并没有真正解释你想要实现的逻辑,所以很难提出建议。

嗯。我猜您希望empId出现不止一次。为此,请使用窗口函数:

Select t.*
from (select t.*, count(*) over (partition by cmpid) as cnt
from Testing t
where saleDate between '2020-08-01' and '2020-08-30'
) t
where cnt > 1;

如果你在group-by之后写每一列,它就无法对其进行分组。如果你想要奇异性,请尝试这个你无法理解的查询。

Select
empId
,Count(empId)
From Testing
Where saleDate between '2020-08-01' and '2020-08-30'
GROUP BY empId
Having Count(empID) > 0

最新更新