YznIT Ответов: 2

Базы данных SQLite сумма всех баллов по конкретному названию


Привет
Мне нужна помощь в суммировании всех значений для определенного имени в таблице.

стол:

CREATE TABLE Games
(
    id INTEGER PRIMARY KEY,
    teamA TEXT,
    teamB TEXT,
    scoreA INTEGER,
    scoreB INTEGER )};


Вставить:

INSERT INTO Games
    (teamA,teamB,scoreA,scoreB)
    VALUES
    ("white","red",10,5),
    ("red","white",18,7),
    ("white","red",6,3);


Что я хочу, так это суммировать счет белой команды с помощью sum ().

И заранее благодарю вас.

Что я уже пробовал:


я пытался суммировать счет для команды white, но он всегда суммирует счет, который не всегда является для команды white, как вы видели с помощью функций insert.

Bryian Tan

Где ваш запрос? Что-то вроде этой работы?

Выберите teamA, SUM (scoreA) из игр
Где teamA = 'белый'
Группа по teamA

2 Ответов

Рейтинг:
1

OriginalGriff

Попробуй:

SELECT SUM(CASE WHEN teamA = 'white' THEN scoreA ELSE 0 END + CASE WHEN teamB = 'white' THEN scoreB ELSE 0 END) FROM Games


CPallini

Ницца.

Рейтинг:
0

dmjm-h

Ваш стол ломает первую нормальную форму.
Столбцы teamA и teamB - это один и тот же столбец. В teamA нет ничего особенного; сочетание белый-красный может быть красно-белым без потери смысла.
Однако обратите внимание, что если вы использовали teamA для обозначения домашней команды, то это также нарушает первую нормальную форму.
Как только вы нормализуете, суммирование баллов становится тривиальным.

CREATE TABLE GameScores
(
  id     INTEGER,
  team   TEXT,
  score INTEGER
);
-- Primary key is id + team

INSERT INTO GameScores (id, team, score) 
  VALUES (1, "white", 10), (1, "red", 5),
         (2, "red", 18), (2, "white", 7), 
         (3, "white", 6), (3, "red", 3);

SELECT SUM(score) FROM GameScores WHERE team = "white";


Я предполагаю, что идентификаторы команд предназначены только для иллюстрации и что на практике вы используете нейтральные идентификаторы.