ここで必要なのは、少し複雑なSQLクエリです。サブクエリで構成されます。
1つ目はこれです(フィドル )。各名前のドアを開けたアイテムの総数を取得します。
SELECT COUNT(*) total, name FROM stats GROUP BY name
次はこれです(フィドル )。ドアと名前ごとの開封数を取得します。
SELECT COUNT(*) bydoor, name, door FROM stats GROUP BY name, door
3つ目(フィドル )2番目のものを組み込み、名前ごとに1行を取得して、ドアが開いていることを示します。
SELECT name,
GROUP_CONCAT(CONCAT(bydoor,'X',' door ', door) ORDER BY bydoor DESC) details
FROM ( SELECT COUNT(*) bydoor,
name,
door
FROM stats
GROUP BY name, door
) s
GROUP BY name
最後に、これらのサブクエリをこの形式で結び付けるには、JOINが必要です。
SELECT t.name, t.total, d.details
FROM ( .... the first subquery ....) t
JOIN ( .... the second subquery .... ) d ON t.name = d.name
ORDER BY t.total DESC, t.name
すべてのスペルは次のようになります(フィドル
)。あなたはそれをあなたのsql
に入れます 可変で、あなたは行ってもいいです。単なる複数行の文字列です。
set sql {SELECT t.name, t.total, d.details
FROM (SELECT COUNT(*) total, name FROM stats GROUP BY name) t
JOIN ( SELECT name,
GROUP_CONCAT(CONCAT(bydoor,'X',' door ', door) ORDER BY bydoor DESC) details
FROM ( SELECT COUNT(*) bydoor,
name,
door
FROM stats
GROUP BY name, door
) s
GROUP BY name
) d ON t.name = d.name
ORDER BY t.total DESC, t.name}
したがって、ネストされたクエリの束で構成されるクエリがあります。
SQLデータ分析が上手になるにつれて、ここで学ぶための秘訣がいくつかあります。
-
GROUP BY
の使用 - クエリのネスト。サブクエリとも呼ばれます。サブクエリは仮想テーブルと考えることができます。
- (高度)
GROUP_CONCAT
。