Фильтрация запросов с одним и тем же PK, но разными значениями ключей - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть следующие данные

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'
  1. Что бы я сделал, чтобы я мог фильтровать и иметь уникальные кортежи излюди кто спит и бодрствует?Например: Эми и Хелен.

  2. Как бы я получил кортежи людей, которые только спят / не спят?

Ответы [ 3 ]

0 голосов
/ 08 февраля 2019

Использование GROUP BY

Оператор GROUP BY часто используется с агрегатными функциями (COUNT, MAX, MIN, SUM, AVG) для группировки набора результатов по одному или нескольким столбцам.

https://www.w3schools.com/sql/sql_groupby.asp

0 голосов
/ 08 февраля 2019

Вы можете попробовать ниже -

    SELECT sid, name
    FROM yourTable
    WHERE status IN ('Sleep', 'Awake')
    GROUP BY sid, name
    having(distinct status)=2
0 голосов
/ 08 февраля 2019

Агрегация - это один из способов найти людей, которые одновременно бодрствуют и спят:

SELECT sid, name
FROM yourTable
WHERE status IN ('Sleep', 'Awake')
GROUP BY sid, name
HAVING MIN(status) <> MAX(status);

enter image description here

Демо

Мы можем попробовать нечто подобное, чтобы найти людей с одним статусом:

SELECT sid, name
FROM yourTable
GROUP BY sid, name
HAVING MIN(status) = MAX(status);

enter image description here

Демо

...