내 질문에, 빠른 쿼리를 다음 쿼리 수 있습니까? 내가 오라클 10g고유 한 값으로 SQL - 그룹
을 사용하고
내가 테이블 제조 업체 및 차량을 말해봐, 나는 열 'Car.Name'의 모든 항목을 계산합니다. 여기에 내가 그것을 할 거라고 어떻게 :
SELECT manuf.Name, COUNT(car1.Name), COUNT(car2.Name), COUNT(car3.Name)
FROM Manufacturer manuf
LEFT JOIN (SELECT * FROM Car c where c.Name = 'Ferrari1') car1 ON manuf.PK = car1.ManufPK
LEFT JOIN (SELECT * FROM Car c where c.Name = 'Ferrari2') car2 ON manuf.PK = car2.ManufPK
LEFT JOIN (SELECT * FROM Car c where c.Name = 'Ferrari3') car3 ON manuf.PK = car3.ManufPK
GROUP BY manuf.Name
이 결과 구함 :
Manufacturer | Ferrari1 | Ferrari2 | Ferrari3
----------------------------------------------
Fiat | 1 | 0 | 5
Ford | 2 | 3 | 0
내가 몇 LEFT 조인과 함께이 시도를하고 괜찮 았는데. 그러나 (90+와 같이) 많이 추가했을 때, 매우 느리게 (1 분 이상) 느려졌습니다.
내 질문에이 쿼리를 수행하는 더 빠른 방법이 있습니까? 귀하의 질문은 매우 명확하지 않다 :
SELECT manuf.Name, c.Name, COUNT(*) Cnt
FROM Manufacturer manuf
LEFT JOIN Car c ON manuf.PK = c.ManufPK
GROUP BY manuf.Name, c.Name
PS 필요에 따라
당신이 당신의 이전 쿼리가 무엇 이었습니까 우리를 게재 할 수 있습니까? – everton
@WoF_Angel 어떤 RDBMS를 사용하십니까? MySQL에서는 'PIVOT'에 대해 MSSQL에서 'GROUP_CONCAT'을 사용하는 것에 대해 생각할 수 있습니다 –
[올바른 색인을 사용하면 여러 조인이 PIVOT/GROUP BY만큼이나 잘 수행 될 것입니다] (http://stackoverflow.com/questions/) 7448213/sql-server-pivot-vs-multiple-join/7449213 # 7449213) –