袁紹滅了公孫瓚後, 盡收河北之地, 其兵鋒所向, 直指曹操, 起大軍三十萬, 聯合徐州劉備, 準備進攻曹操。 面對氣勢洶洶的河北之兵, 許都不少人都慫了, 孔融就勸曹操不可與袁紹作戰, 結果遭到荀彧一頓嘲諷, 郭嘉更是進獻十勝十敗論, 堅定了曹操對抗袁紹的決心。 但是, 在官渡之戰中, 荀彧留守許都負責糧草, 郭嘉直接不知所蹤了, 真正在前線替曹操出謀劃策的, 卻是程昱和荀攸。
袁紹派顏良進攻白馬時, 曹操先後派宋憲魏續和徐晃出戰顏良, 結果兩死一敗。 這結果使得曹操很是頭疼, 程昱站出來舉薦關羽出戰,
曹操與袁紹對峙時, 荀攸一開始就提醒曹操, 我軍糧草不足, 利在急戰, 並獻截糧之計, 舉薦徐晃, 後徐晃果然不負所望, 打敗袁紹押糧官韓猛, 燒盡所運糧草輜重。 荀攸最善識人, 許攸投降曹操後, 獻計讓曹操突襲烏巢, 張遼等將擔心許攸並非真降, 恐其中有詐, 但荀攸卻堅信許攸是真正投降,
荀攸最擅長用計分敵之兵, 爾後聲東擊西。 烏巢一戰後, 荀攸獻計, 揚言曹軍將兵分兩路, 襲擊袁紹官渡大營後方的酸棗和黎陽, 實際的目的是調出袁紹大營主力。 袁紹聽聞曹軍的這個動向, 擔心自己後路被截, 分兵令袁譚辛明各領兵五萬回援, 袁紹大營一下子少了十萬人馬, 正中荀攸下懷, 曹操盡起寨中大軍, 八路齊出, 衝擊袁軍, 袁紹大敗,
袁紹雖然遭受接二連三的打擊, 但他的底子實在太厚了, 袁熙袁譚高幹所部都還有實力, 不久袁紹就聚起了二三十萬大軍, 在倉亭和曹操對峙。 面對袁紹的大軍, 曹操軍隊在士氣上占優, 但在人數上沒什麼優勢, 此時又是程昱站出來, 獻上十面埋伏之計。 這一計, 調動了曹軍全部的人馬, 帳下武將悉數登場, 兵馬分左中右三軍, 左軍分夏侯惇張遼李典樂進夏侯淵五隊, 右軍分曹洪張郃徐晃于禁高覽五隊, 被水為陣, 布口袋型埋伏。 以中軍許褚為誘餌, 半夜挑釁袁紹人馬, 誘敵追趕, 引到埋伏區域, 曹軍十隊人馬齊出, 殺得袁紹大軍人仰馬翻, 死傷殆盡。 這一戰打得袁紹口吐鮮血, 臥病不起, 轉而緊守城池,
曹操的眾謀士中以程昱和荀攸在官渡戰場獻計最多, 作用最大。 不知為何, 世人只知郭嘉荀彧, 卻選擇性地將他們二人忘卻。