【问题标题】:How to select values in multiple tables?如何在多个表中选择值?
【发布时间】:2012-12-05 17:33:58
【问题描述】:

我有以下数据库结构:

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。

感谢您的帮助:)

【问题讨论】:

  • ^ 这个,看看内部连接。

标签: mysql sql database join count


【解决方案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

【讨论】:

    【解决方案2】:

    您通常不能通过行的值来参数化列数,使用 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
    

    【讨论】:

    • 您的请求统计每个car_model_id生产的汽车数量,不要关注factory_id参数。输出如下所示:pastebin.com/0JitQehE
    • 在这个小测试用例中似乎可以正常工作。 gist.github.com/93de4b75d2f5718a08e3
    • 我仍然不明白为什么您的请求不起作用......无论如何,感谢 Mortarboard 徽章的帮助和好运:P
    猜你喜欢
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 2015-07-21
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多