我的问题是否有更快的方式来查询以下内容?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) –