带有GROUP BY的SQL SELECT,返回组

时间:2013-02-28 17:01:35

标签: sql sqlite group-by

我是一个相对SQL初学者,我不完全确定如何问我所问的问题(所以我也不完全确定如何寻求帮助)。

我想使用SELECT语句,该语句使用GROUP BY子句按特定属性进行分组,同时返回该组选择的行。有没有办法做到这一点? (我正在使用,FWIW,SQLite3,但我认为这更像是一个通用SQL语法的问题。)

我有一张表population,其中有关于人和家庭的数据。每一行都是一个人,每个人都被分为几个到几十个家庭。

每个家庭中的一个人(通常是第一个人,uid)是户主,并且设置了head列。我想GROUP BYhousehold_id,并选择该组中每个成员的uid作为“头”。有没有办法用一个陈述来做到这一切?

这就是我所拥有的:

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_idhousehold_id的第一行;即表格中的第一行。如何仅引用此特定组中的household_id DISTINCT

任何提示?提前谢谢。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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;

但您需要对填充表进行别名,因为它在查询中使用了两次。

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;