>Tables:
[dbo].[Dealer]
[number] [firstName] [surName] [birthDate] [startWorkingDate] [ID]
Num Dealer|full name of Dealers| birthdate | date + time | id number
[dbo].[Game]
[gameTypeName] [gameStartDateTime] [gameEndTime] [DealerInGame]
name of game | date + time | date + time| same numbers like [Dealer].[number]
我希望查询做什么: 返回参与最少游戏的荷官(员工编号和全名(的查询。
SELECT top 1 number,firstName +' '+ surName as 'full name' FROM Dealer
where exists (SELECT gameTypeName,COUNT( gameTypeName) FROM Game
GROUP BY gameTypeName)
该查询只为我带来了第一个游戏数量最少的查询,但如果有 2 个或更多具有相同值的荷官,则不会显示所有荷官。
怎么了?
我不认为MySQL像SQL Server那样支持TOP运算符,但是您可以使用LIMIT获取第一条记录,如下所示:
SELECT number,
firstName +' '+ surName as 'full name'
FROM Dealer
where exists (SELECT gameTypeName,COUNT( gameTypeName)
FROM Game
GROUP BY gameTypeName)
LIMIT 1;
连接两个表,使用COUNT()
,然后使用ORDER BY
和LIMIT 1
。这是它的MySQL语法:
SELECT number, CONCAT(firstName, ' ', lastName) AS fullName
FROM Dealer AS d
JOIN Game AS g ON g.DealerInGame = d.number
GROUP BY d.number
ORDER BY COUNT(*)
LIMIT 1
您可以执行以下操作join
:
select d.number, CONCAT(d.firstName, ' ', d.lastName) as fullName
from Dealer d inner join (
select DealerInGame
from Game
group by DealerInGame
having count(*) <= 1
) g on g.DealerInGame = d.number;
如果你想要所有游戏数量最少的庄家,你需要玩最少的游戏,然后找到所有拥有该游戏数量的庄家。
WITH GameCount as (
SELECT
DealerInGame,
Count(*) Games
FROM Game
)
SELECT
d.firstName + ' ' + d.surName fullName,
d.number
FROM GameCount g
LEFT JOIN Dealer d on d.Number = g.DealerInGame
WHERE g.Games = (
SELECT Min(Games)
FROM GameCount)