सेटअप बेला
CREATE TABLE ORDERS (cust INT, brand VARCHAR(100))
INSERT INTO ORDERS VALUES (1, 'Sony')
INSERT INTO ORDERS VALUES (1, 'Sony')
INSERT INTO ORDERS VALUES (1, 'Sony')
INSERT INTO ORDERS VALUES (1, 'Hp')
INSERT INTO ORDERS VALUES (1, 'Hp')
INSERT INTO ORDERS VALUES (2, 'Sony')
INSERT INTO ORDERS VALUES (2, 'Sony')
INSERT INTO ORDERS VALUES (2, 'Hp')
INSERT INTO ORDERS VALUES (2, 'Hp')
INSERT INTO ORDERS VALUES (2, 'Hp')
INSERT INTO ORDERS VALUES (2, 'Hp')
INSERT INTO ORDERS VALUES (3, 'Sony')
INSERT INTO ORDERS VALUES (3, 'Sony')
INSERT INTO ORDERS VALUES (3, 'Sony')
INSERT INTO ORDERS VALUES (3, 'Hp')
INSERT INTO ORDERS VALUES (3, 'Hp')
क्वेरी
विधि 1
select
sony.custId
from
(select cust as custId, Brand, count(*) as count
from orders
where Brand = 'Sony'
group by cust, brand) Sony
inner join
(select cust as custId, Brand, count(*) as count
from orders
where Brand = 'Hp'
group by cust, brand) Hp
on sony.custId = hp.CustId
Where
sony.count > 2 and
hp.count < 5
आप संबंध को समझने के लिए यह अच्छा है। यहाँ एक और तरीका
विधि 2
select cust
from orders
group by cust, brand
having count(case brand when 'Sony' then 'x' end) > 2 and
count(case brand when 'Hp' then 'x' end) < 5
समय लगभग समान है है - यकीन है कि यह डेटा, अनुक्रमित, आदि का प्रयोग करें Sql बेला कार्य योजना लागू करके जांच करने के लिए की मात्रा के आधार पर भिन्न होगी। ऐसा लगता है कि पहली विधि में और चीजें चल रही हैं। लेकिन इसका मतलब यह नहीं है कि जब आप उत्पादन में उपयोग करते हैं, तो यह बहुत खराब होगा।
स्रोत
2015-11-25 18:14:33
क्वेरी से आपका परिणाम क्या था? .. – tharif
विवरण में दिए गए प्रश्न को वास्तव में SQL पार्सर द्वारा अस्वीकार कर दिया गया है। मैंने बस कुछ विवरण देने के लिए प्रदान किया जो मैं करने की कोशिश कर रहा था। क्षमा करें अगर मैंने यह स्पष्ट नहीं किया। – Point