как получить AVG для каждой записи в SQL - PullRequest
0 голосов
/ 26 ноября 2018

Мне нужно получить AVG для каждой строки в SQL, например:

это первая таблица

+ ---+------+-------------+
| course_id | course_name | 
+ ----------+-------------+
| 1         | a           |
| 2         | b           | 
| 3         | c           | 
| 4         | g           | 
+ ---+------+-------------+

Это вторая таблица, мне нужно получить AVG для обоих идентификаторов 1и 2. результат, например:

+ -------------------+------+----------+
| course_feedback_id | rate |course_id |
+ -================--+------+----------+
|       1            | 4    |   1      |
|       2            | 3    |   1      |
|       3            | 2    |   2      |
+ -------------------+------+----------+

это окончательный ответ, который мне нужен

+ ----------------------+
| course_id | AVG(rate) |
+ -=======--+-----------+
|     1     | 3.5       |   
|     2     | 2         |   

+ ----------------------+

Я попробовал это решение, но он даст мне только первую строку, а не все записи.

SELECT *, AVG(`rate`) from secondTable 

пожалуйста, помогите

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

Select course_id,t2.rate from table1 where course_id,rate in (Select course_id,avg(rate) as rate from table group by course_id t2)

Если у вас есть несколько записей / избыточных записей, и вы хотите найти агрегацию для каждого, так как в этом случае вы получили идентификатор, содержащий избыточные записи, в таких случаях всегда пытайтесь использоватьgroup by как group by, как говорит имя, сгруппирует записи столбца, к которому он применяется, и если вы примените агрегацию, avg in this case будет групповым столбцом, к которому он применяется, а не в целом, как для id 1, у нас есть 2избыточные записи, поэтому он будет применять avg (id1_entries) .. также как группа.

0 голосов
/ 26 ноября 2018

Попробуйте это:

SELECT c.course_id, AVG(fb.rate)
FROM course AS c
INNER JOIN course_feedback AS fb ON fb.course_id = c.course_id
GROUP BY c.course_id
0 голосов
/ 26 ноября 2018
SELECT `id`, AVG(`rate`) FROM `your_table` GROUP BY `id`
...