Mysql SQL:Group By&;有子查询问题的计数(*)
假设数据库具有模式Mysql SQL:Group By&;有子查询问题的计数(*),mysql,sql,Mysql,Sql,假设数据库具有模式 卡车(车牌、制造商、型号、年份、里程、最大负载) 驾驶员(驾驶员id、姓名、年龄、地址、驾照) 行程(车牌、驾驶员id、日期、起点、目的地、里程、货物、成本) 编写一条SQL语句,列出前往纽约的次数比前往华盛顿的次数多的司机的姓名和司机id 我想用这样的话来表达 SELECT name, driver-id FROM DRIVER, TRIP, (SELECT name, driver-id FROM DRIVER, TRIP
- 卡车(车牌、制造商、型号、年份、里程、最大负载)
- 驾驶员(驾驶员id、姓名、年龄、地址、驾照)
- 行程(车牌、驾驶员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子句中有一个很大的子查询。我认为您只需要在这里按司机汇总,然后断言到纽约的行程数超过到华盛顿的行程数:
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子句中有一个很大的子查询。使用聚合sum()
和case
关键字
select * from (
SELECT d.name, d.driver-id
, sum(case when destination = 'Washington' then 1 else 0 end) as washington
, sum(case when destination = 'New York' then 1 else 0 end) as newyork
FROM DRIVER d
INNER JOIN TRIP t ON t.driver-id = d.driver-id
GROUP BY d.name, d.driver-id) t1
where t1.newyork > t1.washington
使用聚合sum()
和case
关键字
select * from (
SELECT d.name, d.driver-id
, sum(case when destination = 'Washington' then 1 else 0 end) as washington
, sum(case when destination = 'New York' then 1 else 0 end) as newyork
FROM DRIVER d
INNER JOIN TRIP t ON t.driver-id = d.driver-id
GROUP BY d.name, d.driver-id) t1
where t1.newyork > t1.washington
今天的提示:使用现代的显式
JOIN
语法。更容易写入(无错误)、更容易读取(和维护),并且在需要时更容易转换为外部联接“这正确吗?”-测试似乎很简单-有问题吗?正在运行吗?列名中是否真的允许使用“-”(换句话说:减号),而名称周围没有QOUTS?今天的提示:使用现代的显式JOIN
语法。更容易写入(无错误)、更容易读取(和维护),并且在需要时更容易转换为外部联接“这正确吗?”-这似乎是一个简单的测试——有问题吗?正在运行吗?列名中是否真的允许使用“-”(换句话说:减号),而在名称周围没有qoutes?