0

以下のデータから、親が何人の子供を持っているかを見つけようとしています。これlevelが で、level親はリンク先の です。レベルと子供の数で整理されたデータを出力しようとしています。idrow

私は以下のSQLをつなぎ合わせましたが、これは本当に私が望む方法で結果を返しません:

select id, level, count(parent) as p, country 
  from stats group by level order by level asc, p desc;

手伝ってくれますか?

表データ

"id"    "level" "parent"    "country"
"1"     "1"     "0"         "US"
"2"     "2"     "1"         "US"
"3"     "2"     "1"         "US"
"4"     "2"     "1"         "US"
"5"     "2"     "1"         "US"

"6"     "3"     "2"         "US"
"7"     "3"     "2"         "US"

"8"     "1"     "0"         "US"

"9"     "2"     "8"         "US"
"10"    "2"     "8"         "US"
"11"    "2"     "8"         "US"

"12"    "3"     "9"         "US"
"13"    "3"     "9"         "US"
"14"    "3"     "9"         "US"

"15"    "3"     "10"        "US"
"16"    "3"     "10"        "US"
"17"    "3"     "10"        "US"
"18"    "3"     "10"        "US"

望ましい出力

"id"    "type"  "country"   "Count"
"1"     "1"     "US"        "4"
"8"     "1"     "US"        "3"
"10"    "2"     "US"        "4"
"9"     "2"     "US"        "3"
"2"     "2"     "US"        "2"
4

3 に答える 3

2

これを試して:

SELECT s.id, s.level, s.country, x.cnt 
FROM stats s, 
(SELECT DISTINCT(parent), COUNT(*) AS cnt 
FROM stats GROUP BY parent) x 
WHERE s.id = x.parent ORDER BY s.parent;

このように、階層の上位から順に表示するようにしています。

于 2013-09-27T14:33:02.520 に答える
0

親によってグループ化されたカウントを取得し、それをリストに結合して他の詳細を取得します。

select idt.id as id, idt.level as type, idt.country as country, idc.ct as Count
from stats idt
inner join
(
  select parent, count(id) as ct
  from stats
  group by parent
) idc
on idt.id=idc.parent
order by level asc
于 2013-09-27T14:32:52.610 に答える
0

それは次のようなものかもしれません - SELECT 部分に目的の列を追加してください:

SELECT
  s.id,
  IF (p.number IS NULL,0,p.number) AS number
  FROM stats s
    LEFT JOIN
    (
      SELECT
        parent,
        COUNT(*) AS number
        FROM stats
        GROUP BY parent
        WHERE parent!=0
    ) p
    ON s.id=p.parent
  ORDER BY s.level ASC, p.number DESC
于 2013-09-27T14:33:23.453 に答える