0

次のデータベース構造があります。

car
+----------+------------+----------------+-----------------+
| car_id   | car_name   | car_model_id   | car_factory_id  |
+----------+------------+----------------+-----------------+

car_model
+---------------+----------------+
| car_model_id  | car_model_name |
+---------------+----------------+

factory
+-------------+---------------+-------------------+
| factory_id  | factory_name  | factory_location  |
+-------------+---------------+-------------------+

factory_location
+----------------------+------------------------+
| factory_location_id  | factory_location_name  |
+----------------------+------------------------+


私はしたいと思います:

  • すべての工場を一覧表示する
  • 各工場で生産された車の数を数える
  • car_model でグループ化


出力は次のようになります。

| factory_id | car_model_id = 1 | car_model_id = 2 | car_model_id = ... |
+------------+------------------+------------------+--------------------+
| 1          |        145       |       3307       |         ...        |
+------------+------------------+------------------+--------------------+
| 2          |       32798      |        345       |         ...        |
+------------+------------------+------------------+--------------------+
| 3          |         0        |        10        |         ...        |
+------------+------------------+------------------+--------------------+
| ...        |        ...       |        ...       |         ...        |
+------------+------------------+------------------+--------------------+


私の最も近い試みはこのリクエストですが、それでも私が望むものではありません:
SELECT COUNT(car_id) FROM car GROUP BY car_factory_id AND car_model_id

私の RDBMS は MySQL 5.1 です。

助けてくれてありがとう:)

4

2 に答える 2

1

通常、行の値によってパラメーター化された列の数を持つことはできません。SQL データベースで必要なものをクエリする慣用的な方法は、次のようなものを取得することです。

factory_id | car_model_id | count
1          | 1            | 145
1          | 2            | 3307
...
4          | 1            | 3245
4          | 2            | 38

その場合、次のようにします。

SELECT factory_id, car_model_id, COUNT(*) FROM factory
INNER JOIN car ON factory_id = car_factory_id GROUP BY factory_id, car_model_id
于 2012-12-18T13:46:28.980 に答える
1

これを試して、 ;)

SELECT  a.factory_name , c.car_model_name,
        COUNT(b.car_factory_id) totalCount
FROM    factory a
        LEFT JOIN car b
            ON a.factory_id = b.car_factory_id
        LEFT JOIN car_model c
            ON b.car_model_id = c.car_model_id
GROUP BY a.factory_name , c.car_model_name
ORDER BY factory_name ASC
于 2012-12-18T15:35:10.440 に答える