Setup violino
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')
Richiesta
Metodo 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
Questo è un bene per voi capire relazione. Ecco un altro modo
Metodo 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
Il tempo è circa lo stesso - sicuro che variano in base alla quantità di dati, indici, ecc utilizzare SQL violino per controllare piano di esecuzione. Sembra che nel primo metodo accadano altre cose. Ma non significa che quando si utilizza in produzione, sarà molto peggio.
fonte
2015-11-25 18:14:33
qual è stato il risultato della query? .. – tharif
La query che ho fornito nella descrizione viene effettivamente respinta dal parser SQL. L'ho appena fornito per fornire alcuni dettagli su ciò che stavo cercando di fare. Scusa se non l'ho chiarito. – Point