इस तरह की तालिका से:

Name   | Score
------ | ------
Bill   | 1  
Bill   | 2
Bill   | 1
Steve  | 1 
Steve  | 4 
Steve  | 1 

उन लोगों के नाम लौटाएं जिन्होंने कभी 3 . से ऊपर स्कोर नहीं किया है

उत्तर होगा:

Name   | 
------ | 
Bill   |  
sql
-4
primo7 4 जुलाई 2017, 18:13

4 जवाब

सबसे बढ़िया उत्तर

कुंजी प्रत्येक व्यक्ति के लिए अधिकतम अंक प्राप्त करना है, फिर उन लोगों को फ़िल्टर करें जिनकी अधिकतम 3 से कम है। अधिकतम प्राप्त करने के लिए आपको एक समग्र (GROUP BY और MAX) करने की आवश्यकता है। फिर समुच्चय पर फ़िल्टर लागू करने के लिए आपको WHERE के बजाय HAVING का उपयोग करना चाहिए। तो आप के साथ समाप्त होगा:

SELECT Name, MAX(Score) AS HighScore
FROM Table 
GROUP BY Name 
HAVING MAX(Score) <= 3;
2
Gordon Linoff 4 जुलाई 2017, 18:58

एक समाधान होगा:

SELECT DISTINCT name
  FROM mytable 
 WHERE Name NOT IN 
        ( SELECT Name 
            FROM mytable 
           WHERE score > 3
        )
1
Esteban P. 4 जुलाई 2017, 18:25

नमूना तालिका :

DECLARE @Table1  TABLE 
    (Name varchar(5), Score int)
;

INSERT INTO @Table1
    (Name, Score)
VALUES
    ('Bill', 1),
    ('Bill', 2),
    ('Bill', 1),
    ('Steve', 1),
    ('Steve', 4),
    ('Steve', 1)
;

स्क्रिप्ट :

;with CTE AS (
select Name,Score from @Table1
GROUP BY Name,Score
HAVING (Score) > 3 )
Select 
NAME,
Score  
from  @Table1 T 
where not EXISTS 
(select name from CTE 
        where name = T.Name )

परिणाम :

NAME    Score
Bill    1
Bill    2
Bill    1
0
mohan111 4 जुलाई 2017, 18:26
SELECT name 
FROM table_name
WHERE score < 3
0
Carl Binalla 5 जुलाई 2017, 09:47