私の質問は、次のクエリへのより速い方法はありますか?私は、Oracle 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
私はJOINを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) –