簡體   English   中英

如何在MySQL中對相似的條目組執行平均

[英]how to perform average for similar group of entries in mysql

+----------+--------+
| emp_name | rating |
+----------+--------+
| Sameer   |      4 |
| Sameer   |    9.8 |
| Sameer   |      9 |
| Sameer   |      7 |
| Sameer   |    8.2 |
| Sameer   |    9.5 |
| Sameer   |     10 |
| Ashwath  |      9 |
| Ashwath  |      4 |
| Ashwath  |      9 |
+----------+--------+

我剛剛開始學習SQL,我寫了一個查詢並獲得了上述輸出,但是我想顯示Sameer和Ashwath的平均評分而不是評分,我該怎么做?

查詢:

SELECT
    emp_name,
    bus.rating
FROM employees
JOIN drives
    ON employees.emp_id = drives.emp_id
JOIN bus
    ON bus.bus_no = drives.bus_no
WHERE
    drives.emp_id IN (select emp_id from drives group by emp_id having count(bus_no) > 2);

只需按員工進行匯總並得出平均評分:

SELECT
    emp_name,
    AVG(bus.rating) AS avg_rating
FROM employees
INNER JOIN drives
    ON employees.emp_id = drives.emp_id
INNER JOIN bus
    ON bus.bus_no = drives.bus_no
WHERE
    drives.emp_id IN (SELECT emp_id FROM drives
                      GROUP BY emp_id HAVING COUNT(bus_no) > 2)
GROUP BY
    emp_name;

在學習SQL時,最好做正確的事情:

嘗試始終使用INNER JOIN或LEFT JOIN。 使用IN比進行INNER JOIN或LEFT JOIN更“昂貴”。 最后,當您使用聚合函數(COUNT,SUM,AVG)時,您需要使用GROUP BY。如果我在這里重寫查詢,我將執行以下操作:

 SELECT
        emp_name,
       AVG(bus.rating)
 FROM employees
 INNER JOIN drives on employees.emp_id=drives.emp_id 
 INNER  JOIN
   (select emp_id, count(bus_no) from drives
     group by emp_id having count(bus_no) > 2 ) AS   d 
        ON drives.emp_id = d.emp_id
 INNER   JOIN bus
        ON bus.bus_no = drives.bus_no
  GROUP BY emp_name

這是一張解釋所有聯接的著名圖像 Sql聯接

從表GROUP BY emp_name中選擇emp_name,avg(rating)

嘗試這個 -

$sql = "SELECT emp_name, AVG(rating) as avg_rating FROM table_name GROUP BY emp_name";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM