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/