2017-03-13 48 views
0

我想要得到這樣的輸出的平均值爲:的MySQL如何顯示列和表

Average score 
10 
col1 col2 score 
... 

使用

SELECT AVG(Score), * 
FROM (
SUM(...) AS col1 
SUM(...) AS col2 
SUM(...) AS Score 
) AS T1 

這是工作的時候我只選擇AVG(分數)或*,但不是都。有沒有什麼辦法可以在不重複代碼的情況下做到這一點?

這是我得到的錯誤,當我嘗試:

ERROR 1064 (42000) at line 27: You have an error in your SQL syntax; check 
the manual that corresponds to your MySQL server version for the right 
syntax to use near '* 
FROM (
SELECT 
    testresults.hostname AS Hostname, 
    hostinfo.env A' at line 3 

回答

0

不能與其他列使用*。你可以這樣做:

SELECT * FROM... 

SELECT col1, col2, col3... FROM... 

但不

SELECT col1, col2, col3, * FROM... 

例如:

mysql> SELECT id FROM users LIMIT 5; 
+----+ 
| id | 
+----+ 
| 18 | 
| 22 | 
| 23 | 
| 26 | 
| 27 | 
+----+ 
5 rows in set (0.00 sec) 

mysql> SELECT id, * FROM users LIMIT 5; 
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM users LIMIT 5' at line 1 
+0

謝謝!但是,我可以多次引用派生表嗎?我不想重新計算一切。 – user2975120

+0

當然。有了完整的查詢和數據樣本,我可以進一步幫助您。在執行SUM之後,您將無法獲取AVG,但可以獲得SUM和COUNT(*),並且您將獲得AVG = SUM(col)/ COUNT(*) – Gab

0

你可以做這樣的事情:

SELECT * 
FROM 
test t, 
(SELECT AVG(score) AS average_score 
FROM test) a; 

這是SQL Fiddle