我的問題是否有更快的方式來查詢以下內容?SQL - 按不同值分組
我使用Oracle 10g
說我有一個表,製造商和汽車,我要算列「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 JOIN的嘗試這樣做,它工作得很好。但是當我添加了很多(如90+)時,它超慢(超過1分鐘)。
我的問題,有沒有更快的方法來做這個查詢?
你能告訴我們什麼是你以前的查詢? – everton
@WoF_Angel您使用哪種RDBMS?在MySQL中,您可以考慮在MSSQL中使用'GROUP_CONCAT'關於'PIVOT' –
[通過正確的索引,多個連接可能至少會像PIVOT/GROUP BY一樣執行](http://stackoverflow.com/questions/ 7448453/sql-server-pivot-vs-multiple-join/7449213#7449213) –