sql - MySQL - 获取多个分组行的摘要?

标签 sql mysql database

2 个表:所有者和汽车

一个车主可以拥有多辆汽车。汽车可以标记为 usable_offroad、usable_onroad 或两者。 cars 表有 usable offroad 和 usable_onroad 字段,可以设置为 0 或 1(no 或 yes)

考虑以下查询:

SELECT *
FROM owners
LEFT JOIN cars on cars.owner_id = owners.id
GROUP BY owners.id
ORDER BY owners.last_name

我的目标是返回车主列表,以及每个车主是否拥有公路车或 buggy ,或两者兼而有之:

    Last Name    First Name    Has Offroad Car      Has Onroad Car
----------------------------------------------------------------------
    Smith        Todd          Yes                   No
    Smith        Tom           Yes                   Yes
    Test         Sue           No                    Yes
    Thumb        Joe           No                    No
    White        Al            Yes                   No

如何查询?正在考虑使用 ROLLUP,但如果摘要不是附加行而是已经分组的所有者行上的实际字段,我会更喜欢。

最佳答案

使用:

   SELECT DISTINCT
          o.lastname,
          o.firstname,
          CASE WHEN COALESCE(y.num_offroad, 0) > 0 THEN 'yes' ELSE 'no' END AS "Has Offroad Car"
          CASE WHEN COALESCE(x.num_onroad, 0) > 0 THEN 'yes' ELSE 'no' END AS "Has Onroad Car"
     FROM OWNERS o
LEFT JOIN (SELECT c.owner_id,
                  COUNT(*) AS num_onroad
             FROM CARS c
            WHERE c.usable_onroad = 1
         GROUP BY c.owner_id) x ON x.owner_id = o.id
LEFT JOIN (SELECT c.owner_id,
                  COUNT(*) AS num_offroad
             FROM CARS c
            WHERE c.usable_offroad = 1
         GROUP BY c.owner_id) y ON y.owner_id = o.id

关于sql - MySQL - 获取多个分组行的摘要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2283281/

相关文章:

mysql - OR 其他条件之间的冲突

MySql/MariaDB 无法更改 Debian 9.1 服务器上的默认数据目录

mysql - 在 Codeigniter 中使用Where子句获取最后一条记录

php - PHP脚本。检查用户是否已经在MySQL数据库中

sql - 两个 IN() 运算符,一列

mysql - 如何合并所有并按多个选择分组而不输出空?

时间:2018-01-08 标签:c#sql: get auto incrementing id after inserting data

c# - 验证数据库中是否存在? (MySql 和 ASP.NET)

django - Django ORM 中的 SQL 何时执行

java - Multi-Tenancy Spring Data JDBC