如何在 GROUP BY 查询中找到最高的 COUNT? - MYSQL

How to find the highest COUNT in GROUP BY query? - MYSQL

我需要找到航班总数最多的航空公司的名称、街道、城市、州和国家/地区。

到目前为止,这是我的代码:

SELECT MAX(tName) as name, MAX(tStreet) as street, MAX(tCity) as city, MAX(tState) as state, 
MAX(tCountry) as country, MAX(totalFlights) as maxTotal
FROM(
SELECT FLIGHT.name as tName, AIRLINE.street as tStreet, AIRLINE.city as tCity, AIRLINE.state as 
tState, AIRLINE.country as tCountry, COUNT(flightNumber) as totalFlights
FROM FLIGHT
LEFT JOIN AIRLINE ON AIRLINE.name = FLIGHT.name
GROUP BY FLIGHT.name)as t; 

这是我要连接在一起的两个表:

CREATE TABLE AIRLINE (
name        VARCHAR(30),            /* Airline name */
street      VARCHAR(30) NOT NULL,   /* Airline headquater location - street */
city        VARCHAR(30) NOT NULL,   /* Airline headquater location - city */
state       VARCHAR(20) NOT NULL,   /* Airline headquater location - state */
postcode    CHAR(10)    NOT NULL,   /* Airline headquater location - postcode */
country     VARCHAR(30) NOT NULL,   /* Airline headquater location - country */
phone       VARCHAR(20),            /* phone number */
website     VARCHAR(60),            /* Manager start date */
ceo         VARCHAR(30),            /* CEO of the airline */
CONSTRAINT AIRLINE_PK PRIMARY KEY(name),
CONSTRAINT AIRLINE_CK1 UNIQUE(phone),
CONSTRAINT AIRLINE_CK2 UNIQUE(website));

CREATE TABLE FLIGHT (
name            VARCHAR(30),            /* airline name */
flightNumber    CHAR(6),                /* Flight number */
departAirport   VARCHAR(50),            /* Departure airport */
departTime      DATETIME    NOT NULL,   /* Departure date and time */
arriveAirport   VARCHAR(50) NOT NULL,   /* Arriving airport */
arriveTime      DATETIME,               /* Arriving date and time */
capacity        DECIMAL(3)  NOT NULL,   /* Capacity for passengers */
airliner        VARCHAR(20) NOT NULL,   /* Aircraft for passengers */
CONSTRAINT FLIGHT_PK PRIMARY KEY(flightNumber, departAirport, departTime),
CONSTRAINT FLIGHT_CK1 UNIQUE (flightNumber, arriveAirport, arriveTime),
CONSTRAINT FLIGHT_FK1 FOREIGN KEY (name) REFERENCES AIRLINE(name)); 

这是数据库 fiddle 的 link:https://www.db-fiddle.com/f/jbCqw2UDM2gGZDPnMbyA6k/0

我收到的结果是:

 name:              street:                       city:    state: country:  maxTotal:
'Virgin Australia', 'B-12 Jianguomenwai Avenue', 'Mascot', 'VIC', 'China', '12'

我需要接收这个输出:

 name:    street:           city:     state:  country:    maxTotal:
'Qantas', '10 Bourke Road', 'Mascot', 'NSW', 'Australia', '12'

如有任何帮助,我们将不胜感激!

我认为这只是一个行限制查询:

select 
    a.*,
    (select count(*) from flight f where f.name = a.name) no_flights
from arline a
order by no_flights desc
limit 1

另一方面,如果你想允许顶部连接,你可以使用 rank()(在 MySQL 8.0 中可用):

select *
from 
    select t.*, rank() over(order by no_flights desc) rn
    from (
        select 
            a.*,
            (select count(*) from flight f where f.name = a.name) no_flights
        from arline a
        order by no_flights desc
    ) t
) t
where rn = 1