我是一个相对SQL初学者,我不完全确定如何问我所问的问题(所以我也不完全确定如何寻求帮助)。
我想使用SELECT
语句,该语句使用GROUP BY
子句按特定属性进行分组,同时返回该组选择的行。有没有办法做到这一点? (我正在使用,FWIW,SQLite3,但我认为这更像是一个通用SQL语法的问题。)
我有一张表population
,其中有关于人和家庭的数据。每一行都是一个人,每个人都被分为几个到几十个家庭。
每个家庭中的一个人(通常是第一个人,uid
)是户主,并且设置了head
列。我想GROUP BY
列household_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_id
为household_id
的第一行;即表格中的第一行。如何仅引用此特定组中的household_id
DISTINCT
?
任何提示?提前谢谢。
答案 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;