0

次のクエリがあります。

SELECT q2.name, q1.countParticipants, q2.countGames FROM 
(
    SELECT c.countryName AS name,  count(p.idParticipant) AS countParticipants 
    FROM Country c, Participant p, Game g 
    WHERE p.fkGame = g.idGame AND c.idCountry = p.fkCOuntry AND c.countryName LIKE '%$countryName%' 
    GROUP BY c.countryName 
    ORDER BY c.countryName;
) AS q1 ,
(
    SELECT c.countryName AS name, count(g.idGame) as countGames 
    FROM Country c, Game g 
    WHERE c.idCountry = g.fkHostCountry AND c.countryName LIKE '%$countryName%' GROUP BY c.countryName 
    ORDER BY c.countryName)
) AS q2 
GROUP BY q1.name 
ORDER BY q1.name

countryNameこのクエリは、特定の(q1)に開催されたオリンピックの参加者数と、同じ(q2)に開催された総試合数を返すことになっています。countryName何かを返しますが、結果は間違っています。

必要なもの (つまり、ゲームの総数participants) を返す代わりに、(指定された国でcountParticipants) 参加したゲームの数を返すようです。

さて、問題はDBのデータから、またはクエリから発生します。問題を修正する場所がわかるように、チェックアウトしていただけますか?

どうもありがとうございました

: 両方のサブクエリの結果セットは、同じ数の行を返し、同じように並べられます。

4

2 に答える 2

0

Oracle には、ロールアップと呼ばれる優れた集計関数があり、渡された列に基づいて小計を計算します。

ロールアップの例へのリンクを次に示します。

http://www.compshack.com/sql/oracle-group-rollup

于 2013-05-31T14:42:59.167 に答える