基于3种不同标准的MySQL单行计数

基于3种不同标准的MySQL单行计数,mysql,optimization,Mysql,Optimization,我想返回一个基于mySQL查询的关联数组,这样查询将以3种不同的方式产生3列,这3列是单个数据集的计数。我的最佳解决方案是有点不舒服,我希望有更好的方法,因为下面没有显示一些不相关的复杂性。具体地说,我有一个用户表,其中包含用户编号、性别和地点——地点是动态变量,需要稍后绑定到查询中(在本例中,我查找的是地点=1)。基本表如下所示: user gender place 1 m 1 2 m 2 3 f 1 4 m

我想返回一个基于mySQL查询的关联数组,这样查询将以3种不同的方式产生3列,这3列是单个数据集的计数。我的最佳解决方案是有点不舒服,我希望有更好的方法,因为下面没有显示一些不相关的复杂性。具体地说,我有一个用户表,其中包含用户编号、性别和地点——地点是动态变量,需要稍后绑定到查询中(在本例中,我查找的是地点=1)。基本表如下所示:

user gender  place
1      m       1
2      m       2
3      f       1
4      m       1
5      f       2
我想返回第1位的3列,分别是total、total male、total Femal

我的第一次尝试返回了3行正确的值,但由于它们是行,我无法使用关联数组干净地访问它们:

SELECT COUNT(DISTINCT user) as total FROM users WHERE place=1
UNION ALL 
SELECT COUNT(DISTINCT id_customer) as male FROM users
    WHERE gender = 'm' AND place=1
UNION ALL
SELECT COUNT(DISTINCT id_customer) as female FROM users
    WHERE gender = 'f' AND place=1
我的第二次尝试给出了正确的结果,但似乎有点冗长,因为我必须绑定place变量3次-有更好的方法吗

SELECT total, male, female FROM
  (SELECT COUNT(DISTINCT user) as total FROM users
        WHERE place=1
        ) as total
INNER JOIN
  (SELECT COUNT(DISTINCT user) as male  FROM users
        WHERE place=1 AND gender='m') as male
INNER JOIN
 (SELECT COUNT(DISTINCT user) as female  FROM users
        WHERE place=1 AND gender='f') as female

你需要不同的部分吗?或者“用户”字段是否唯一(主键或其他)

两个版本我都是用英语编写的

如果用户是唯一的,那么这就足够了:

SELECT count(1), sum(gender='m'), sum(gender='f')
FROM users
WHERE place=1;

啊,是的,太简单了!谢谢你。是的,我需要在实际应用中使用我的DISTINCE,但它与您指出的这个问题无关