我有像facebook这样的数据库。一个查询要求我统计有多少男性朋友,女性朋友和无朋友(没有性别特定)。
到目前为止我有这个查询,但它只返回1行,而不是所有用户。
create or replace view friends as
select fs.user_id,
fs.user_id_friend,
sum(if(fs.sex = 'M', 1, 0)) as Male_Friends,
sum(if(fs.sex = 'F', 1, 0)) as Female_Friends,
sum(if(fs.sex = ' ', 1, 0)) as Friends_Undefined_Sex
from friends_sex fs;
这打印我只有一行我需要它来打印所有用户,任何人都可以帮助我吗?
如果您需要有关表格或观点的更多信息请求,我对这个论坛很新,请原谅我的任何错误。
答案 0 :(得分:1)
表中只有一位朋友吗? :)您在查询中缺少group by
命令告诉用户希望得到结果的sql,还要从fs.user_id_friend
语句中删除select
,或者告诉sql你想要一行对于每个朋友,在这种情况下,所有列都不会大于1.如果您想要总共count
个朋友,还可以fs.user_id_friend
count
。
create or replace view friends as
select fs.user_id,
count(fs.user_id_friend) AS NumberOfFriends,
sum(if(fs.sex = 'M', 1, 0)) as Male_Friends,
sum(if(fs.sex = 'F', 1, 0)) as Female_Friends,
sum(if(fs.sex = ' ', 1, 0)) as Friends_Undefined_Sex
from friends_sex fs
GROUP BY fs.user_id;
答案 1 :(得分:1)
您的查询格式错误。问题是你在select
中有列(例如'fs.user_id ) that are not in the
group by。这在MySQL中是允许的,但在其他数据库中则不允许。它往往只会引起混淆。< / p>
由于聚合功能,查询是聚合查询。如果没有group by
,则返回一行。所以你需要一个group by
:
select fs.user_id,
sum(fs.sex = 'M') as Male_Friends,
sum(fs.sex = 'F') as Female_Friends,
sum(fs.sex = ' ') as Friends_Undefined_Sex
from friends_sex fs
group by fs.user_id;
请注意,在MySQL中,您不需要if()
。 MySQL在整数上下文中将布尔值视为整数,其中“1”表示真,“0”表示假。
另请注意,没有fs.user_id_friend
返回;据推测,很多人都有不止一个朋友。如果您想要一个列表,请包括:
group_concat(fs.user_id_friend)
获取朋友ID的逗号分隔列表。