3

私は比較的 SQL の初心者であり、求めていることを尋ねる方法が完全にはわかりません (そのため、ヘルプを検索する方法も完全にはわかりません)。

SELECT句を使用して特定の属性でグループ化するステートメントを使用GROUP BYし、同時にそのグループで選択された行を参照したいと考えています。これを行う方法はありますか?(私は FWIW、SQLite3 を使用していますが、これは汎用 SQL 構文の問題だと思います。)

population人と世帯に関するデータを含むテーブルがあります。各行は人であり、人はそれぞれ 1 人から 10 人までの世帯にグループ化されます。

各世帯の 1 人 (通常は による最初の人uid) が世帯主であり、head列が設定されています。GROUP BY列に移動し、グループの各メンバーの「ヘッド」をhousehold_id選択します。uid1つのステートメントですべてを行う方法はありますか?

ここに私が持っているものがあります:

SELECT DISTINCT household_id,
    COUNT(uid) AS members   /* The number of members in each household; it works */,
    (SELECT uid FROM "group" WHERE head == 1) /* Only I don't know how to do this */
    FROM population GROUP BY household_id;

私はこのようなことを試しましたが、私が望むものは得られませんでした:

SELECT DISTINCT household_id,
    COUNT(uid) AS members,
    (SELECT uid FROM population WHERE household_id == household_id AND head == 1) /* <-- here */
    FROM population GROUP BY household_id;

しかし、それはもちろん;でhousehold_idある最初の行を選択します。household_idつまり、テーブルの最初の行です。この特定のグループにhousehold_idあるのみを参照するにはどうすればよいですか?DISTINCT

任意のヒント?前もって感謝します。

4

2 に答える 2

4

これを試してみてください。

SELECT  household_id,
        COUNT(uid) AS members, 
        MAX(CASE WHEN head = 1 THEN uid ELSE NULL END) headID
FROM    population 
GROUP   BY household_id;
于 2013-02-28T17:05:19.830 に答える
1

あなたは正しい軌道に乗っていたかもしれません

SELECT DISTINCT household_id,
COUNT(uid) AS members,
(SELECT uid FROM population WHERE household_id == household_id AND head == 1) /* <-- here */
FROM population GROUP BY household_id;

ただし、人口テーブルはクエリで 2 回使用されるため、エイリアスを作成する必要があります。

SELECT DISTINCT household_id,
COUNT(uid) AS members,
(SELECT uid FROM population gr_head WHERE pop.household_id = gr_head.household_id AND head == 1) /* <-- here */
FROM population pop GROUP BY household_id;
于 2013-02-28T17:08:34.347 に答える