请写出如下postgresql 在一个user表中,查出创建时间在2023年3月以后,以username分组,每组既拥有age等于18岁又拥有age等于19岁的组有多少个
时间: 2024-02-11 13:07:38 浏览: 24
可以使用如下的SQL语句来实现:
```
SELECT COUNT(*)
FROM (
SELECT username
FROM user
WHERE age = 18 OR age = 19
AND create_time >= '2023-03-01'
GROUP BY username
HAVING COUNT(DISTINCT age) = 2
) AS subquery;
```
其中,内层子查询首先筛选出了所有创建时间在2023年3月以后、既拥有age等于18岁又拥有age等于19岁的用户组,并使用GROUP BY语句将它们按照username进行了分组。最后,外层SELECT语句对内层子查询的结果集进行了统计,得到了符合条件的用户组的数量。
相关问题
请写出如下postgresql 在一个user表中,查出创建时间在2023年3月以后,以username分组,每组没有同时拥有age等于18岁和age等于19岁的组有多少个
以下是查询语句:
```
SELECT username,
COUNT(*) as group_count
FROM user
WHERE created_at >= '2023-03-01'
GROUP BY username
HAVING NOT EXISTS (
SELECT 1
FROM user u
WHERE u.username = user.username
AND age = 18
) OR NOT EXISTS (
SELECT 1
FROM user u
WHERE u.username = user.username
AND age = 19
)
```
这个查询语句的含义是首先从user表中筛选出创建时间在2023年3月以后的用户,然后按照用户名进行分组。然后使用HAVING子句来过滤掉同时拥有18岁和19岁的用户组,最后统计剩余的用户组数量。
注意:这个查询语句仅供参考,具体的逻辑需要根据实际业务需求进行调整。
请写出如下postgresql 在一个user表中,以username分组,查出每组既拥有age等于18岁又拥有age等于19岁的组有多少个
可以使用如下的SQL语句来实现:
```
SELECT COUNT(*)
FROM (
SELECT username
FROM user
WHERE age = 18 OR age = 19
GROUP BY username
HAVING COUNT(DISTINCT age) = 2
) AS subquery;
```
其中,内层子查询首先筛选出了所有既拥有age等于18岁又拥有age等于19岁的用户组,并使用GROUP BY语句将它们按照username进行了分组。最后,外层SELECT语句对内层子查询的结果集进行了统计,得到了符合条件的用户组的数量。