[英]Getting a count of distinct counts in mySql
我有兩個表,一個是團隊的,一個是玩家的,我想找出的是總人數表,換句話說,我想統計擁有2個成員的團隊總數,即所有團隊的總數有3個成員,等等
這是數據庫結構。
(側邊欄問題:我在這里是個新手:是否有更好的方法發布SQL?)
CREATE TABLE `formsfiles`.`Teams` (
`ID` INT NOT NULL AUTO_INCREMENT ,
`Name` VARCHAR(45) NULL ,
PRIMARY KEY (`ID`) );
INSERT INTO `Teams` (`Name`) VALUES ('Sharks');
INSERT INTO `Teams` (`Name`) VALUES ('Jets');
INSERT INTO `Teams` (`Name`) VALUES ('Fish');
INSERT INTO `Teams` (`Name`) VALUES ('Dodgers');
CREATE TABLE `Players` (
`ID` INT NOT NULL AUTO_INCREMENT ,
`Name` VARCHAR(45) NULL ,
`Team_ID` INT NULL ,
PRIMARY KEY (`ID`) );
INSERT INTO `Players` (`Name`, `Team_ID`) VALUES ('Jim', '1');
INSERT INTO `Players` (`Name`, `Team_ID`) VALUES ('Tom', '1');
INSERT INTO `Players` (`Name`, `Team_ID`) VALUES ('Harry', '2');
INSERT INTO `Players` (`Name`, `Team_ID`) VALUES ('Dave', '2');
INSERT INTO `Players` (`Name`, `Team_ID`) VALUES ('Tim', '3');
INSERT INTO `Players` (`Name`, `Team_ID`) VALUES ('Trey', '4');
INSERT INTO `Players` (`Name`, `Team_ID`) VALUES ('Jay', '4');
INSERT INTO `Players` (`Name`, `Team_ID`) VALUES ('Steve', '4');
INSERT INTO `Players` (`Name`, `Team_ID`) VALUES ('Chris', '4');
我想要的是團隊人數。
我想看下面的輸出
Team_Size Count
1 1
2 2
4 1
最簡單的方法可能是:
select team_count, count(*) from
(select count(*) team_count from players group by team_id) sq
group by team_count
(盡管其中不包括沒有球員的球隊。)
SQLFiddle 在這里 。
首先,您需要團隊規模:
select t.id as teamId, count(p.id) as teamSize
from
`Teams` as t
left join `Players` as p on t.id = p.teamId
group by
t.id;
請注意,這也將返回零個玩家的隊伍。 如果您不想這樣做,請使用inner join
而不是left join
。
現在,將此查詢用作最終查詢的行源:
select teamSize, count(teamId)
from (
select t.id as teamId, count(p.id) as teamSize
from
`Teams` as t
left join `Players` as p on t.id = p.teamId
group by
t.id) as a
group by teamSize;
希望這可以幫助
還有一件事。
如果您有大數據集,則此查詢可能會掛起。 因此,最好創建一個臨時表,對其進行索引,然后在臨時表上運行查詢:
drop table if exists temp_teamSize;
create temporary table temp_teamSize
select t.id as teamId, count(p.id) as teamSize
from
`Teams` as t
left join `Players` as p on t.id = p.teamId
group by
t.id;
alter table temp_teamSize
add unique index idx_teamId(teamId),
add index idx_teamSize(teamSize);
select teamSize, count(teamId)
from temp_teamSize
group by teamSize;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.