过滤具有相同 PK 但不同值键的查询
Filtering queries with same PK but different value keys
我有以下数据
123 Amy Sleep
234 Bob Sleep
987 Helen Sleep
123 Amy Awake
123 Amy Awake
678 Fay Awake
765 Jay Awake
876 Irene Awake
987 Helen Awake
来自 运行
SELECT t1.sid, name, status
FROM t2
JOIN Apply ON t2.sid=t1.sid
WHERE status='Awake' OR status='Sleep'
我该怎么做才能过滤并拥有同时处于睡眠和清醒状态的人的唯一元组?例如:艾米和海伦。
如何获取只有 asleep/awake 的人的元组?
聚合是找到既醒又睡的人的一种方法:
SELECT sid, name
FROM yourTable
WHERE status IN ('Sleep', 'Awake')
GROUP BY sid, name
HAVING MIN(status) <> MAX(status);
我们可以尝试类似的方法来找到只有一种状态的人:
SELECT sid, name
FROM yourTable
GROUP BY sid, name
HAVING MIN(status) = MAX(status);
使用GROUP BY
GROUP BY 语句通常与聚合函数(COUNT、MAX、MIN、SUM、AVG)一起使用,按一个或多个列对结果集进行分组。
你可以试试下面的-
SELECT sid, name
FROM yourTable
WHERE status IN ('Sleep', 'Awake')
GROUP BY sid, name
having(distinct status)=2
我有以下数据
123 Amy Sleep
234 Bob Sleep
987 Helen Sleep
123 Amy Awake
123 Amy Awake
678 Fay Awake
765 Jay Awake
876 Irene Awake
987 Helen Awake
来自 运行
SELECT t1.sid, name, status
FROM t2
JOIN Apply ON t2.sid=t1.sid
WHERE status='Awake' OR status='Sleep'
我该怎么做才能过滤并拥有同时处于睡眠和清醒状态的人的唯一元组?例如:艾米和海伦。
如何获取只有 asleep/awake 的人的元组?
聚合是找到既醒又睡的人的一种方法:
SELECT sid, name
FROM yourTable
WHERE status IN ('Sleep', 'Awake')
GROUP BY sid, name
HAVING MIN(status) <> MAX(status);
我们可以尝试类似的方法来找到只有一种状态的人:
SELECT sid, name
FROM yourTable
GROUP BY sid, name
HAVING MIN(status) = MAX(status);
使用GROUP BY
GROUP BY 语句通常与聚合函数(COUNT、MAX、MIN、SUM、AVG)一起使用,按一个或多个列对结果集进行分组。
你可以试试下面的-
SELECT sid, name
FROM yourTable
WHERE status IN ('Sleep', 'Awake')
GROUP BY sid, name
having(distinct status)=2