选择两列中的最大记录总和

时间:2014-08-22 23:48:53

标签: mysql sum max two-columns

我需要选择联盟中最佳射手的球队。这是匹配列,如果你是team1_id,那么它取决于m_id,或者team2_id与得分相同,因为联盟中也有匹配。

 CREATE TABLE IF NOT EXISTS `xeg8u_bl_match` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `m_id` int(11) NOT NULL DEFAULT '0',
  `team1_id` int(11) NOT NULL DEFAULT '0',
  `team2_id` int(11) NOT NULL DEFAULT '0',
  `score1` int(11) NOT NULL DEFAULT '0',
  `score2` int(11) NOT NULL DEFAULT '0',
  `match_descr` text NOT NULL,
  `published` char(1) NOT NULL DEFAULT '0',
  `is_extra` char(1) NOT NULL DEFAULT '0',
  `m_played` char(1) NOT NULL DEFAULT '0',
  `m_date` date NOT NULL DEFAULT '0000-00-00',
  `m_time` varchar(10) NOT NULL DEFAULT '',
  `m_location` varchar(255) NOT NULL,
  `bonus1` decimal(10,2) NOT NULL DEFAULT '0.00',
  `bonus2` decimal(10,2) NOT NULL DEFAULT '0.00',
  `team1_strzaly` varchar(255) NOT NULL,
  `team1_strzalyc` varchar(255) NOT NULL,
  `team1_posiadanie` varchar(255) NOT NULL,
  `team1_przejecia` varchar(255) NOT NULL,
  `team1_faule` varchar(255) NOT NULL,
  `team1_zkartki` varchar(255) NOT NULL,
  `team1_ckartki` varchar(255) NOT NULL,
  `team1_kontuzje` varchar(255) NOT NULL,
  `team1_spalone` varchar(255) NOT NULL,
  `team1_rrozne` varchar(255) NOT NULL,
  `team1_celnosc` varchar(255) NOT NULL,
  `team1_dpodan` varchar(255) NOT NULL,
  `team2_strzaly` varchar(255) NOT NULL,
  `team2_strzalyc` varchar(255) NOT NULL,
  `team2_posiadanie` varchar(255) NOT NULL,
  `team2_przejecia` varchar(255) NOT NULL,
  `team2_faule` varchar(255) NOT NULL,
  `team2_zkartki` varchar(255) NOT NULL,
  `team2_ckartki` varchar(255) NOT NULL,
  `team2_kontuzje` varchar(255) NOT NULL,
  `team2_spalone` varchar(255) NOT NULL,
  `team2_rrozne` varchar(255) NOT NULL,
  `team2_celnosc` varchar(255) NOT NULL,
  `team2_dpodan` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=399 ;

现在我在考虑在SELECT,MAX和SUM中使用两个函数,我试图得到这个,但我不知道如何让它工作,我知道如何显示目标得分的主场和客场得分但我不知道如何判断哪支球队是顶级球员。有什么想法吗?

在所有评论之后我决定尝试一下。所以我解决了它确实有效但我的问题是,如果有任何方法可以更容易地做到这一点,并且是否需要以不同的方式做到这一点?

    //season_id
$link = ConnectToMySql();
$wynik = mysqli_query($link, "SELECT season_id FROM xeg8u_bl_season_teams WHERE team_id = '$teamekid' LIMIT 1");
$m_id = mysqli_fetch_array($wynik);
$r4 = $m_id[0];

//sprawdzam jakie id dni meczowych znajdują się w sezonie o id x
$link = ConnectToMySql();
$wynik = mysqli_query($link, "SELECT MIN(id) FROM xeg8u_bl_matchday WHERE s_id = '$r4'");
$m_id = mysqli_fetch_array($wynik);
$min_r1 = $m_id[0];

$link = ConnectToMySql();
$wynik = mysqli_query($link, "SELECT MAX(id) FROM xeg8u_bl_matchday WHERE s_id = '$r4'");
$m_id = mysqli_fetch_array($wynik);
$max_r1 = $m_id[0];

$link = ConnectToMySql();
$wynik = mysqli_query($link, "SELECT m_id FROM xeg8u_bl_match WHERE m_id LIKE '$r1'");
$id = mysqli_fetch_array($wynik);
$r2 = $id[0];



$link = ConnectToMySql();
$wynik = mysqli_query($link, "Select team, sum(score) as totalscore from (select team1_id as team, sum(score1) as score from xeg8u_bl_match WHERE m_id BETWEEN '$min_r1' AND '$max_r1' group by team1_id union all select team2_id as team, sum(score2) as score from xeg8u_bl_match WHERE m_id BETWEEN '$min_r1' AND '$max_r1' group by team2_id) as scores group by team order by totalscore asc limit 1");
$krol = mysqli_fetch_array($wynik);
$r3 = $krol[0];

这样做是否可以,或者有更简单,更好看的方式来做到这一点? 正如我说现在它确实有效:)感谢你们所有人。

1 个答案:

答案 0 :(得分:2)

我想你需要这个:

select team, sum(score) as totalscore
from
(
    select team1_id as team, sum(score1) as score
    from xeg8u_bl_match
    group by team1_id
    union all
    select team2_id as team, sum(score2) as score
    from xeg8u_bl_match
    group by team2_id
) as scores
group by team
order by 2 desc
limit 1
相关问题