5

1つの出力に結合したい2つのクエリがありますが、列の数が異なるため、UNIONを使用できません。

テーブルには、すべて整数を含むrefフィールドがありますid refid cellid cat

クエリ1:各一意の行の総数を検索しますcellid

SELECT cellid, COUNT(*) totalcount, cat FROM rel GROUP BY cellid

catクエリ2:一意のそれぞれのモード(最も一般的な値)を検索しますcellid

SELECT cellid, cat
FROM rel t
GROUP BY cellid, cat
HAVING cat = (
SELECT cat
FROM rel
WHERE cellid = t.cellid
GROUP BY cat
ORDER BY COUNT(*) DESC, cat
LIMIT 1
)

私がやろうとしていることの例を示すために、私は自分のテーブルにクエリを実行したいと思います

id | refid | cellid | cat
1  | 1     |  1     | 1
2  | 2     |  2     | 2
3  | 3     |  3     | 4
4  | 1     |  1     | 2
5  | 2     |  1     | 2
6  | 3     |  1     | 3
7  | 1     |  2     | 2
8  | 1     |  1     | 2

そして戻る

cellid | no_of_rows | Mode_of_cat
 1     |  5         |  2
 2     |  2         |  2
 3     |  1         |  4
4

2 に答える 2

10

ここでの最も簡単な解決策は、既にある 2 つの結果セットを結合するクエリを作成することです。クエリの結果を tmp テーブルに保存し、次のように一時テーブルを結合できます。

SELECT tmp1.cellid, tmp1.rows, tmp2.mode_cat FROM
(
    SELECT cellid, COUNT(*) AS rows
    FROM rel
    GROUP BY cellid
)tmp1
LEFT JOIN
(
    SELECT cellid, cat AS mode_cat
    FROM rel t
    GROUP BY cellid, cat
    HAVING cat = (
        SELECT cat
        FROM rel
        WHERE cellid = t.cellid
        GROUP BY cat
        ORDER BY COUNT(*) DESC, cat
        LIMIT 1
    )
)tmp2
ON tmp1.cellid = tmp2.cellid;
于 2012-10-24T16:56:54.320 に答える
3

2番目のクエリでは、変更できます

SELECT cellid, cat

SELECT cellid, 0 as totalcount, cat

最初のクエリの列と一致するようにします。

于 2012-10-24T16:36:20.033 に答える