2017-08-07 90 views
0

假設我們有一個名爲summary的摘要表,其中包含以下字段:date,user_id,song_idcount。它在每天結束時顯示用戶收聽給定歌曲的歷史中有多少次。SQL符號/變量名稱

稱爲daily的第二個表記錄用戶是否收聽特定歌曲。該表用於更新第一個表。如果歌曲位於daily表中,但不在summary表中,則會在summary表中創建一條具有適當計數的新記錄。在下面的行

SELECT A.USERID, A.SONG, SUM(A.COUNT) COUNT 
FROM 
(SELECT USERID, SONG, COUNT FROM SUMMARY 
UNION ALL 
SELECT USERID, SONG, COUNT FROM DAILY WHERE DATE = NOW()) A 
GROUP BY A.USERID, A.SONG 

爲什麼會出現A.COUNT旁邊COUNT

問題/問題我期待通過一些樣品溶液和不知道關於這個答案的特殊符號SUM(A.COUNT) COUNT?同樣地,在DATE = NOW())後面的A之後的位置是:WHERE DATE = NOW()) A

+0

這些都是_aliases_。他們給列或子查詢命名,以便可以在其他地方引用它們。 –

+0

這是一個別名。在列的情況下,它命名'SUM(A.COUNT)'列'COUNT',而在'A'的情況下,它將'A'的子查詢別名爲'A'。 ColumnName'。 – Siyual

回答

0

這是一個別名。該示例將一個表或字段名稱別名(在本例中爲A)。

MySQL官方文檔將幫助你在這裏:https://dev.mysql.com/doc/refman/5.7/en/select.html

引用(重點由我加的):

一個select_expr可以給使用AS alias_name別名。別名是 ,用作表達式的列名稱,可用於GROUP BY, ORDER BYHAVING子句。例如:

SELECT CONCAT(last_name, ', ', first_name) AS full_name FROM mytable ORDER BY full_name;

AS關鍵字是可選混疊一個 select_expr與標識符時。前面的例子中可能是 寫成這樣:

SELECT CONCAT(last_name, ', ', first_name) full_name FROM mytable ORDER BY full_name;

+0

Doh - 假設它是您正在使用的MySQL!如果不是,請參閱相應的* SQL文檔 - 但它會是同一件事:-) – wally

0

這些被稱爲別名和簡單地重命名的列。在Sum(A.Count)的情況下,這是必需的,因爲函數的輸出沒有列名。

這equivilent編寫

SUM(A.Count) AS Count, 

或者

SUM(A.Count) "Count",