mysql - SQL:分组依据和具有子查询问题的 COUNT(*)

标签 mysql sql

假设数据库具有架构

  • 卡车(车牌、制造商、型号、年份、里程、最大负载)
  • 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/

相关文章:

mysql - 为什么 MySQL 语法错误消息如此糟糕?

php - PHP(已弃用)mysql 模块与 MySQLi 和 PDO 的漏洞

Mysql - 如何减去2个查询返回的行数

sql - 是否可以在 SQL Server 中的 where 或 having 子句中使用自定义字段?

php - 统计连续访问次数

sql - SQL中多对多的解析

mysql - 主键的 mariadb 优化不起作用

mysql IS NULL 和 IS NOT NULL 不互斥

c# - 索引超出范围异常 - C#

sql - 加快SQL查询速度