首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用where将所有类别的数据

使用where将所有类别的数据
EN

Stack Overflow用户
提问于 2013-09-12 07:56:11
回答 3查看 36关注 0票数 0

我有两个相关的表,数据(no,姓名,城市代码,年龄)和城市(代码,城市)。

台球城

代码语言:javascript
复制
  +------+------------+
  | code | city       |
  +------+------------+
  | A1   | Jakarta    |
  | A2   | Bali       |
  | A3   | Semarang   |
  | A4   | Surabaya   |
  | C1   | Dili       |
  | C2   | Jayapura   |
  | C3   | Yogyakarta |
  | C4   | Bandung    |
  +------+------------+

表数据

代码语言:javascript
复制
+----+--------+----------+------+
| no | name   | citycode | age  |
+----+--------+----------+------+
|  1 | Ony    | A3       |   27 |
|  2 | Abri   | A3       |   28 |
|  3 | Denny  | C4       |   27 |
|  4 | Febri  | C1       |   27 |
|  5 | Galih  | C3       |   28 |
|  6 | Yulia  | A2       |   26 |
|  7 | Zening | A1       |   25 |
+----+--------+----------+------+

我想按城市统计27岁的雇员人数。

我的问题是:

代码语言:javascript
复制
 select city.city , count(data.name) as Nmb_of_employees
 from city
 left join
 data on data.citycode = city.code
 where data.age = 27
 group by city.city;

结果

代码语言:javascript
复制
+----------+------------------+
| city     | Nmb_of_employees |
+----------+------------------+
| Bandung  |                1 |
| Dili     |                1 |
| Semarang |                1 |
+----------+------------------+

但我想要的结果是这样

代码语言:javascript
复制
+------------+------------------+
| city       | Nmb_of_employees |
+------------+------------------+
| Jakarta    |               0  |
| Bali       |               0  |
| Semarang   |               1  |
| Surabaya   |               0  |
| Dili       |               1  |
| Jayapura   |               0  |
| Yogyakarta |               0  |
| Bandung    |               1  |
+------------+------------------+

对于上面的结果,我应该使用什么查询?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-12 07:58:26

您需要删除WHERE子句,该子句导致筛选出仅包含年龄为27的员工的记录。SUM(age = 27)只是一个mysql特定的语句,它基本上概括了表达式的布尔结果。它可以进一步修改为使用CASE,这是一个更友好的关系数据库,SUM(CASE WHEN age = 27 THEN 1 ELSE 0 END)

代码语言:javascript
复制
SELECT  a.City, IFNULL(SUM(age = 27), 0) Nmb_of_employees 
FROM    city a
        LEFT JOIN Data b
            ON a.code = b.cityCode
GROUP   BY a.City
  • SQLFiddle演示
票数 2
EN

Stack Overflow用户

发布于 2013-09-12 08:02:28

我认为您需要在ON子句中检查“年龄”:

代码语言:javascript
复制
SELECT city.city , count(data.name) AS Nmb_of_employees
  FROM city
       LEFT JOIN data 
              ON data.citycode = city.code 
             AND data.age = 27
 GROUP BY city.city;

否则,您将正确地获得表(带有空格),但随后使用WHERE子句筛选出空白。

票数 1
EN

Stack Overflow用户

发布于 2013-09-12 10:24:19

选择不同的城市,计数(名称)从城市m_t3左加入数据m_t4的年龄=27和m_t3.code = m_t4.citycode组按城市

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18758612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档