diff --git a/scouting/db/db.go b/scouting/db/db.go
index 82f7fa8..55f2310 100644
--- a/scouting/db/db.go
+++ b/scouting/db/db.go
@@ -84,6 +84,20 @@
 	Rank, Dq           int32
 }
 
+type DriverRankingData struct {
+	// Each entry in the table is a single scout's ranking.
+	// Multiple scouts can submit a driver ranking for the same
+	// teams in the same match.
+	// The teams being ranked are stored in Rank1, Rank2, Rank3,
+	// Rank1 being the best driving and Rank3 being the worst driving.
+
+	ID          uint `gorm:"primaryKey"`
+	MatchNumber int32
+	Rank1       int32
+	Rank2       int32
+	Rank3       int32
+}
+
 // Opens a database at the specified port on localhost. We currently don't
 // support connecting to databases on other hosts.
 func NewDatabase(user string, password string, port int) (*Database, error) {
@@ -99,7 +113,7 @@
 		return nil, errors.New(fmt.Sprint("Failed to connect to postgres: ", err))
 	}
 
-	err = database.AutoMigrate(&Match{}, &Shift{}, &Stats{}, &NotesData{}, &Ranking{})
+	err = database.AutoMigrate(&Match{}, &Shift{}, &Stats{}, &NotesData{}, &Ranking{}, &DriverRankingData{})
 	if err != nil {
 		database.Delete()
 		return nil, errors.New(fmt.Sprint("Failed to create/migrate tables: ", err))
@@ -272,3 +286,19 @@
 	})
 	return result.Error
 }
+
+func (database *Database) AddDriverRanking(data DriverRankingData) error {
+	result := database.Create(&DriverRankingData{
+		MatchNumber: data.MatchNumber,
+		Rank1:       data.Rank1,
+		Rank2:       data.Rank2,
+		Rank3:       data.Rank3,
+	})
+	return result.Error
+}
+
+func (database *Database) QueryDriverRanking(MatchNumber int) ([]DriverRankingData, error) {
+	var data []DriverRankingData
+	result := database.Where("match_number = ?", MatchNumber).Find(&data)
+	return data, result.Error
+}
diff --git a/scouting/db/db_test.go b/scouting/db/db_test.go
index 1e11008..460b177 100644
--- a/scouting/db/db_test.go
+++ b/scouting/db/db_test.go
@@ -729,3 +729,33 @@
 		t.Errorf("Got %#v,\nbut expected %#v.", actual, expected)
 	}
 }
+
+func TestDriverRanking(t *testing.T) {
+	fixture := createDatabase(t)
+	defer fixture.TearDown()
+
+	expected := []DriverRankingData{
+		{ID: 1, MatchNumber: 12, Rank1: 1234, Rank2: 1235, Rank3: 1236},
+		{ID: 2, MatchNumber: 12, Rank1: 1236, Rank2: 1235, Rank3: 1234},
+	}
+
+	err := fixture.db.AddDriverRanking(
+		DriverRankingData{MatchNumber: 12, Rank1: 1234, Rank2: 1235, Rank3: 1236},
+	)
+	check(t, err, "Failed to add Driver Ranking")
+	err = fixture.db.AddDriverRanking(
+		DriverRankingData{MatchNumber: 12, Rank1: 1236, Rank2: 1235, Rank3: 1234},
+	)
+	check(t, err, "Failed to add Driver Ranking")
+	err = fixture.db.AddDriverRanking(
+		DriverRankingData{MatchNumber: 13, Rank1: 1235, Rank2: 1234, Rank3: 1236},
+	)
+	check(t, err, "Failed to add Driver Ranking")
+
+	actual, err := fixture.db.QueryDriverRanking(12)
+	check(t, err, "Failed to get Driver Ranking")
+
+	if !reflect.DeepEqual(expected, actual) {
+		t.Errorf("Got %#v,\nbut expected %#v.", actual, expected)
+	}
+}
