请注意你不需要
select distinct
使用时
group by
.
SELECT
l.c_raceName AS raceName
, l.c_raceDate AS raceDate
, COUNT( * ) AS mostCrashes
FROM Crashes l
GROUP BY
l.c_raceName
, l.c_raceDate
HAVING COUNT( * ) = 0
OR COUNT( *) = (
SELECT
MAX( mostCrashes )
FROM (
SELECT
l.c_raceName AS raceName
, l.c_raceDate AS raceDate
, COUNT( l.c_raceId ) AS mostCrashes
FROM Crashes l
GROUP BY
l.c_raceName
, l.c_raceDate
) sq
)
ORDER BY
mostCrashes
;
如果您使用的是mysql 8或更高版本,那么可以使用公共表表达式(common table expression,cte)来简化它。
WITH cte
AS (
SELECT
l.c_raceName AS raceName
, l.c_raceDate AS raceDate
, COUNT( * ) AS mostCrashes
FROM Crashes l
GROUP BY
l.c_raceName
, l.c_raceDate
)
SELECT
*
FROM cte
WHERE mostCrashes = ( SELECT MAX( mostCrashes ) FROM cte )
OR mostCrashes = 0
ORDER BY
mostCrashes
;
如果只需要一行,另一种方法是按计算列对结果排序(降序),并将结果限制为一行。Y
SELECT
l.c_raceName AS raceName
, l.c_raceDate AS raceDate
, COUNT( l.c_raceId ) AS mostCrashes
FROM Crashes l
GROUP BY
l.c_raceName
, l.c_raceDate
ORDER BY
mostCrashes DESC
LIMIT 1
编辑
CREATE TABLE Crashes(
c_raceName varchar(40) NOT NULL
,c_raceDate varchar(40) NOT NULL
);
â
INSERT INTO Crashes(c_raceName,c_raceDate)
VALUES
('Race 1','2018/01/21')
, ('Race 1','2018/01/21')
, ('Race 1','2018/01/21')
, ('Race 2','2018/01/21')
, ('Race 2','2018/01/21')
, ('Race 2','2018/01/21')
, ('Race 2','2018/01/21')
, ('Race 2','2018/01/21')
, ('Race 1','2018/09/11')
, ('Race 1','2016/03/14');
;
艾斯
SELECT
l.c_raceName AS raceName
, l.c_raceDate AS raceDate
, COUNT( l.c_raceDate ) AS mostCrashes
FROM Crashes l
GROUP BY
l.c_raceName
, l.c_raceDate
HAVING COUNT( l.c_raceDate ) = 0
OR COUNT( l.c_raceDate ) = (
SELECT
MAX( mostCrashes )
FROM (
SELECT
l.c_raceName AS raceName
, l.c_raceDate AS raceDate
, COUNT( l.c_raceDate ) AS mostCrashes
FROM Crashes l
GROUP BY
l.c_raceName
, l.c_raceDate
) sq
)
ORDER BY
mostCrashes
;
raceName | raceDate | mostCrashes
:------- | :--------- | ----------:
Race 2 | 2018/01/21 | 5
WITH cte
AS (
SELECT
l.c_raceName AS raceName
, l.c_raceDate AS raceDate
, COUNT( l.c_raceDate ) AS mostCrashes
FROM Crashes l
GROUP BY
l.c_raceName
, l.c_raceDate
)
SELECT
*
FROM cte
WHERE mostCrashes = ( SELECT MAX( mostCrashes ) FROM cte )
OR mostCrashes = 0
ORDER BY
mostCrashes
;
总状花序总状花序多数
:———————————————————
比赛2 2018/01/21 5
DB<gt;小提琴
here