我有一些問題搞清楚什麼似乎很簡單,但它躲過了我。任何幫助深表感謝。計數查詢沒有正確分組
CREATE TABLE IF NOT EXISTS `match_history` (
`id` int(11) NOT NULL auto_increment,
`match_id` int(11) NOT NULL,
`team_id` int(11) NOT NULL,
`player_id` int(11) NOT NULL,
`map` varchar(150) NOT NULL,
`score` int(11) NOT NULL,
`outcome` varchar(25) NOT NULL,
`notes` longtext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=271 ;
match_id links to matches.id
team_id links to matchteams.id
player_id links to persons.id
我希望看到的是勝利和每隊的損失,但我有問題,因爲上面的match_history表將每場比賽,每個隊多行。
例如:
INSERT INTO `match_history` (`id`, `match_id`, `team_id`, `player_id`, `map`, `score`, `outcome`, `notes`) VALUES
(221, 44, 2, 124, 'Village', 1570, 'Win', ''),
(220, 44, 2, 115, 'Village', 1600, 'Win', ''),
(219, 44, 2, 92, 'Village', 2740, 'Win', ''),
(218, 44, 4, 105, 'Village',1000, 'Loss', ''),
(217, 44, 4, 111, 'Village', 1220, 'Loss', ''),
(216, 44, 4, 130, 'Village', 1440, 'Loss', ''),
(215, 44, 4, 122, 'Village', 2160, 'Loss', ''),
(214, 44, 4, 130, 'Seatown', 1410, 'Loss', ''),
(213, 44, 4, 122, 'Seatown', 1600, 'Loss', ''),
(212, 44, 4, 111, 'Seatown', 1790, 'Loss', ''),
(211, 44, 4, 105, 'Seatown', 1790, 'Loss', ''),
(210, 44, 2, 113, 'Seatown', 1020, 'Win', ''),
(209, 44, 2, 124, 'Seatown', 1480, 'Win', ''),
(207, 44, 2, 115, 'Seatown', 2850, 'Win', ''),
(208, 44, 2, 92, 'Seatown', 2160, 'Win', ''),
(222, 44, 2, 113, 'Village', 900, 'Win', ''),
(223, 45, 1, 123, 'Hardhat', 2970, 'Win', ''),
(224, 45, 1, 26, 'Hardhat', 2930, 'Win', ''),
(225, 45, 1, 107, 'Hardhat', 1710, 'Win', ''),
(226, 45, 3, 101, 'Hardhat', 1530, 'Loss', ''),
(227, 45, 3, 100, 'Hardhat', 1420, 'Loss', ''),
(228, 45, 3, 125, 'Hardhat', 1010, 'Loss', ''),
(229, 45, 1, 107, 'Seatown', 2520, 'Win', ''),
(230, 45, 1, 123, 'Seatown', 2260, 'Win', ''),
(231, 45, 1, 26, 'Seatown', 1560, 'Win', ''),
(232, 45, 3, 101, 'Seatown', 1510, 25, 3, 42, 0.6, 0, 0, 0, 'Loss', ''),
這是我用的查詢,但它的計算每一行的1
select mh.team_id as team_id, COUNT(distinct(mh.match_id)) as matches,
count(mh.map) as maps, mh.outcome, SUM(IF(mh.outcome='Win',1,0)) as wins,
SUM(IF(mh.outcome='Loss',1,0)) as losses, m.id, mt.name as teamname
FROM match_history mh, matches m, ladders l, match_teams mt
WHERE mh.team_id = mt.id and mh.match_id = m.id and
m.ladder_id = l.id and l.type = 'internal'
GROUP by mh.team_id
ORDER by wins desc
最近一次插入是怎麼回事? – 2012-02-09 15:11:04