Справка по SQL-запросу: возвращение отдельных значений из подзапроса Count - PullRequest
2 голосов
/ 22 октября 2010

Я застрял довольно давно, пытаясь заставить этот запрос работать.Вот настройка:

У меня есть таблица [Примечания], которая содержит неуникальный (Число) столбец и неуникальный (Результат) столбец.Я ищу, чтобы создать оператор SELECT, который будет отображать каждое отдельное (Number) значение, где количество кортежей {(Number), (Result)}, где Result = 'NA' равно> 25.

Number | Result  
 100   |  'NA'  
 100   |  'TT'  
 101   |  'NA'  
 102   |  'AM'  
 100   |  'TT'  
 200   |  'NA'  
 200   |  'NA'  
 201   |  'NA'

В основном, есть автодозвон, который вызывает номер и возвращает код в зависимости от результатов вызова.Мы хотим игнорировать числа, в которых код 'NA' (без ответа) возвращен более 25 раз.

Мои основные попытки до сих пор были похожи на:

SELECT DISTINCT n1.Number 
FROM Notes n1 
WHERE (SELECT COUNT(*) FROM Notes n2
       WHERE n1.Number = n2.Number and n1.Result = 'NA') > 25

Я знаюэтот запрос неверен, но в целом я не уверен, как связать DISTINCT n1.Number от начального выбора с числом, используемым в подзапросе COUNT.Большинство примеров, которые я вижу, на самом деле не делают этого, добавляя условие к возвращаемому COUNT.Мне не приходилось трогать слишком много SQL за последние полвека, поэтому я довольно ржавый.

Ответы [ 2 ]

5 голосов
/ 22 октября 2010

вы можете сделать это так:

SELECT Number
FROM Notes 
WHERE Result = 'NA'
GROUP BY Number
HAVING COUNT(Result) > 25
2 голосов
/ 22 октября 2010

Попробуйте это:

SELECT Number
FROM (
    SELECT Number, Count(Result) as CountNA 
    FROM Notes
    WHERE Result = 'NA'
    GROUP BY Number
)
WHERE CountNA > 25

РЕДАКТИРОВАТЬ: в зависимости от продукта SQL может потребоваться дать производной таблице имя корреляции таблицы, например,

SELECT DT1.Number
  FROM (
        SELECT Number, Count(Result) as CountNA 
          FROM Notes
         WHERE Result = 'NA'
         GROUP 
            BY Number
       ) AS DT1 (Number, CountNA)
 WHERE DT1.CountNA > 25;
...