postgreSql having字段和查询目标字段为同一个字段,导致没有查询结果
时间: 2023-10-14 21:59:23 浏览: 247
可能是因为你的查询条件不正确。HAVING 子句用于在 GROUP BY 子句中对分组进行过滤,它应该用于聚合函数(如 SUM、AVG、COUNT 等)的结果,而不是用于普通的列。如果你在 HAVING 子句中使用了普通的列名,则可能会导致查询结果为空。请确保你的 HAVING 子句中使用的是聚合函数的结果,或者使用 WHERE 子句进行普通列的过滤。同时,要确保查询目标字段和 HAVING 子句中的字段是同一个字段。
相关问题
查询每科成绩都大于90分的同学,其中有成绩低于90的不算,字段有学生姓名,成绩,学科 ,用postgresql
在PostgreSQL中,你可以使用SELECT语句配合WHERE子句来查询所有每科成绩都大于90分的同学信息。假设有一个名为students的表,其中包含student_name(学生姓名)、score(成绩)和subject(学科)字段,可以编写如下的SQL查询:
```sql
SELECT student_name, score, subject
FROM students
WHERE score > 90 AND subject IN (
SELECT subject
FROM students
GROUP BY subject
HAVING COUNT(*) = (SELECT COUNT(*) FROM students WHERE score > 90)
);
```
这个查询首先筛选出每个学科中有至少一名同学分数大于90的所有学科(`IN (SELECT subject...)`),然后从这些学科中选择那些所有学生的平均分数也是大于90的记录(`HAVING COUNT(*) = ...`)。最终返回的是所有满足条件的学生姓名、成绩和学科。
请写出如下postgresql 在一个user表中,查出创建时间在2023年3月以后,以username分组,每组没有同时拥有age等于18岁和age等于19岁的组有多少个,请展示查询结果
好的,以下是相应的SQL查询语句:
```
SELECT username, COUNT(*) AS group_count
FROM user
WHERE created_at >= '2023-03-01' AND age NOT IN (18, 19)
GROUP BY username
HAVING COUNT(DISTINCT age) < 2;
```
这条SQL语句中,我们使用了WHERE子句来筛选出创建时间在2023年3月以后的用户记录,并使用GROUP BY子句将结果按照username字段进行分组。然后,我们使用HAVING子句来过滤掉那些同时拥有age等于18岁和age等于19岁的用户组,并计算剩余的用户组数量。
查询结果将会显示每个用户组的名称和计数值,其中只包含没有同时拥有age等于18岁和age等于19岁的组。
阅读全文