SUMIF查询返回一行

时间:2016-06-16 20:58:50

标签: mysql sql

我有像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;

这打印我只有一行我需要它来打印所有用户,任何人都可以帮助我吗?

如果您需要有关表格或观点的更多信息请求,我对这个论坛很新,请原谅我的任何错误。

2 个答案:

答案 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的逗号分隔列表。