0

関連する 2 つのテーブル data(no, name, citycode, age) と city(code, city) があります

テーブルシティ

  +------+------------+
  | code | city       |
  +------+------------+
  | A1   | Jakarta    |
  | A2   | Bali       |
  | A3   | Semarang   |
  | A4   | Surabaya   |
  | C1   | Dili       |
  | C2   | Jayapura   |
  | C3   | Yogyakarta |
  | C4   | Bandung    |
  +------+------------+

表データ

+----+--------+----------+------+
| 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歳の従業員数を数えたい

私のクエリ:

 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;

結果

+----------+------------------+
| city     | Nmb_of_employees |
+----------+------------------+
| Bandung  |                1 |
| Dili     |                1 |
| Semarang |                1 |
+----------+------------------+

しかし、私が望む結果はこのようなものです

+------------+------------------+
| city       | Nmb_of_employees |
+------------+------------------+
| Jakarta    |               0  |
| Bali       |               0  |
| Semarang   |               1  |
| Surabaya   |               0  |
| Dili       |               1  |
| Jayapura   |               0  |
| Yogyakarta |               0  |
| Bandung    |               1  |
+------------+------------------+

上記の結果にはどのクエリを使用すればよいですか?

4

3 に答える 3

2

WHERE年齢の従業員のみを持つレコードを除外する句を削除する必要があり27ます。SUM(age = 27)基本的に式のブール結果を合計したmysql固有のステートメントのみです。CASEさらに、より RDBMS に適したusing に変更できますSUM(CASE WHEN age = 27 THEN 1 ELSE 0 END)

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
于 2013-09-12T07:58:26.950 に答える
1

ON句内で「年齢」チェックが必要だと思います:

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それ以外の場合は、(空白を含む) テーブルを正しく取得しますが、句で空白を除外します。

于 2013-09-12T08:02:28.480 に答える
0

SELECT DISTINCT city,count(name) FROM city m_t3 LEFT JOIN data m_t4 ON age =27 AND m_t3.code = m_t4.citycode GROUP BY city

于 2013-09-12T10:24:19.787 に答える