2015-05-20 2 views
1

У меня есть таблица (DF)Возвращение строки, где поле имеет определенное количество

+----+------+-----+ 
| ID | PT | AVG | 
+----+------+-----+ 
| A | 1.00 | 2.5 | 
| A | 2.00 | 3.5 | 
| B | 1.00 | 2.8 | 
| B | 2.00 | 2.6 | 
| B | 3.00 | 3.9 | 
+----+------+-----+ 

Я пытаюсь написать простое заявление SQL, чтобы вытащить идентификатор, который имеет 3 очка.

Я попробовал эти 2 заявления, но я делаю это неправильно

1. Returns all rows again 

SELECT * FROM DF 
WHERE PT BETWEEN '1.000' AND '3.000' 

2. Returns counts of rows 

SELECT * FROM DF b  
WHERE b.PT=(SELECT COUNT(DISTINCT A.PT) FROM DF A WHERE A.ID=B.ID) 

Мой желаемый результат:

+----+------+-----+ 
| ID | PT | AVG | 
+----+------+-----+ 
| B | 1.00 | 2.8 | 
| B | 2.00 | 2.6 | 
| B | 3.00 | 3.9 | 
+----+------+-----+ 

ответ

1

Вам в первую очередь необходимо выяснить, какие группы имеют три счета строк. Вы можете сделать это, используя пункт GROUP BY и HAVING:

SELECT id 
FROM myTable 
GROUP BY id 
HAVING COUNT(*) = 3; 

Предложение HAVING используется для условий, касающихся агрегации, не используйте пункт WHERE для этого. Если у вас есть эти значения, вы можете вернуться назад и выбрать все строки из таблицы, где столбец идентификатор IN результирующего набора выше:

SELECT * 
FROM myTable 
WHERE id IN(
    SELECT id 
    FROM myTable 
    GROUP BY id 
    HAVING COUNT(*) = 3); 

Вот SQL Fiddle пример с использованием данных выборки.

1
SELECT * 
FROM YourTable 
WHERE ID IN (SELECT ID 
      FROM YourTable 
      GROUP BY ID 
      HAVING COUNT(*) = 3); 
Смежные вопросы