Как сделать сумму разных значений без дубликатов - PullRequest
0 голосов
/ 04 июня 2018

Как сделать сумму разных значений, но одинакового идентификатора без дублирования разных значений в столбце?

Мой ввод в команду SQL.

    SELECT
      students.id        AS student_id,
      students.name,
      COUNT(*)           AS enrolled,
      c2.price           AS course_price,
      (COUNT(*) * price) AS paid
    FROM students
      LEFT JOIN enrolls e on students.id = e.student_id
      LEFT JOIN courses c2 on e.course_id = c2.id
    WHERE student_id NOTNULL
    GROUP BY students.id, students.name, c2.price
    ORDER BY student_id ASC;

Мой результат.

 student_id |        name         | enrolled | paid 
------------+---------------------+----------+------
       1001 | Gulbadan Bálint     |        1 |   90
       1002 | Hanna Adair         |        5 |  450
       1003 | Taddeo Bhattacharya |        1 |   90
       1004 | Persis Havlíček     |        1 |   75
       1004 | Persis Havlíček     |        5 |  450
       1005 | Tory Bateson        |        1 |   90
       1007 | Dávid Fèvre         |        1 |   90
       1008 | Masuyo Stoddard     |        1 |   90
       1009 | Iiris Levitt        |        1 |   75
       1009 | Iiris Levitt        |        2 |  180
       1013 | Artair Kovač        |        1 |   30
       1013 | Artair Kovač        |        1 |   90
       1015 | Matilda Guinness    |        2 |  180
       1017 | Margarita Ek        |        1 |   90
       1018 | Misti Zima          |        3 |  270
       1019 | Conall Ventura      |        1 |   90
       1020 | Vivian Monday       |        2 |  180

Мой ожидаемый результат.

 student_id |        name         | enrolled | paid 
------------+---------------------+----------+------
       1001 | Gulbadan Bálint     |        1 |   90
       1002 | Hanna Adair         |        5 |  450
       1003 | Taddeo Bhattacharya |        1 |   90
       1004 | Persis Havlíček     |        6 |  525
       1005 | Tory Bateson        |        1 |   90
       1007 | Dávid Fèvre         |        1 |   90
       1008 | Masuyo Stoddard     |        1 |   90
       1009 | Iiris Levitt        |        3 |  255
       1013 | Artair Kovač        |        2 |  120
       1015 | Matilda Guinness    |        2 |  180
       1017 | Margarita Ek        |        1 |   90
       1018 | Misti Zima          |        3 |  270
       1019 | Conall Ventura      |        1 |   90
       1020 | Vivian Monday       |        2 |  180

Я думаю, чтопричиной является команда GROUP BY, но она выдаст ошибку, если я не напишу цену GROUP BY.

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Вы исключили столбец course_price как в своем текущем, так и в ожидаемом результате.Кажется, вы ошибочно включили это в group by.

SELECT
  students.id        AS student_id,
  students.name,
  COUNT(*)           AS enrolled,
  --c2.price         AS course_price, --exclude this in o/p?
  (COUNT(*) * price) AS paid
FROM students
  LEFT JOIN enrolls e on students.id = e.student_id
  LEFT JOIN courses c2 on e.course_id = c2.id
WHERE student_id NOTNULL
GROUP BY students.id, students.name --,c2.price --and remove it from here 
ORDER BY student_id ASC;
0 голосов
/ 04 июня 2018

Возможно, вы можете использовать функцию SUM ().Пожалуйста, смотрите ссылку ниже, может быть, это то же самое с вами:
как группировать и вернуть строку суммы в Postgres

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...