我有一张表格,其中包含公司名称,员工姓名,休假天数。我想提取员工的公司名称和最短约会日期。为此,我使用此查询
select companyname, min(date) from table where companyname = 'apple' and employeename = 'ABC'
然而,此查询无法说明该列" tablename.companyname"必须出现在GROUP BY子句中或用于聚合函数。
我确实尝试在group by子句中使用companyname以及日期,但这给了我很多值而不是一个最小日期。
任何人都可以在不增加复杂性的情况下弄清楚如何做到这一点。
我确实找到了解决方案。但是,我并不完全理解为什么它要求我在group by子句中使用companyname。
答案 0 :(得分:2)
标准SQL要求是GROUP BY
未聚合的列。
SELECT companyname, min(date) AS min_date
FROM tbl
WHERE companyname = 'apple'
AND employeename = 'ABC'
GROUP BY comoanyname;
您可以使用位置参考来缩短Postgres中的代码:
...
GROUP BY 1;
或从companyname
列表中删除预定列SELECT
。那么你也不需要GROUP BY
:
SELECT min(date) AS min_date
FROM tbl
WHERE companyname = 'apple'
AND employeename = 'ABC';