假设数据库具有架构
- 卡车(车牌、制造商、型号、年份、里程、最大负载)
- DRIVER(驾驶员 ID、姓名、年龄、地址、驾照)
- TRIP(车牌、司机 ID、日期、出发地、目的地、里程、 cargo 、费用)
编写一条 SQL 语句,列出前往纽约次数多于前往华盛顿次数的司机的姓名和司机 ID。
我试图用类似的东西来表达
SELECT
name, driver-id
FROM
DRIVER, TRIP,
(SELECT name, driver-id
FROM DRIVER, TRIP
WHERE TRIP.driver-id = DRIVER.driver-id AND destination = “Washington”
GROUP BY name, driver-id) as TEMP
WHERE
TRIP.driver-id = DRIVER.driver-id
AND destination = “New York”
AND DRIVER.driver-id = TEMP.driver-id
GROUP BY
name, driver-id
HAVING
COUNT(*) > TEMP.COUNT(*);
这是正确的吗?谢谢!
最佳答案
我认为你只需要在这里按司机进行聚合,然后断言前往纽约的行程数超过前往华盛顿的行程数:
SELECT
d.name,
d.driverid
FROM DRIVER d
INNER JOIN TRIP t
ON d.driverid = t.driverid
GROUP BY
d.name,
d.driverid
HAVING
SUM(t.destination = 'New York') >
SUM(t.destination = 'Washington');
此方法只是使用两个计数的条件聚合对连接表进行一次传递。我通常不会使用你的方法,因为 select 子句中有很大的子查询。
关于mysql - SQL:分组依据和具有子查询问题的 COUNT(*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58337250/