我有以下数据库结构:
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 |
+----------------------+------------------------+
我想:
输出应该是这样的:
| 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。
感谢您的帮助:)
答案 0 :(得分: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
答案 1 :(得分: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