我想基于mySQL查询返回一个关联数组,以便查询产生3列,这些列是3种不同方式的单个数据集的计数。我最好的解决方案有点不合理,我希望有更好的方法,因为下面没有显示一些不相关的复杂性。具体来说,我有一个用户表,其中包含用户编号,性别和地点 - 这个地方是动态变量,需要稍后绑定到查询中(在这个例子中,我正在寻找地点= 1)。基本表如下所示:
user gender place
1 m 1
2 m 2
3 f 1
4 m 1
5 f 2
我希望在第1位返回3列总数,男性总数,女性总数。
我的第一次尝试返回具有正确值的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
我的第二次尝试给了我正确的结果,但似乎有点冗长,因为我必须将地方变量绑定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
答案 0 :(得分:2)
你需要DISTINCT部分吗?或“用户”字段是唯一的(主键或其他)?
我在http://sqlfiddle.com/#!9/928fa/7
中准备了两个版本如果用户是唯一的,那么这应该足够了:
SELECT count(1), sum(gender='m'), sum(gender='f')
FROM users
WHERE place=1;