2017-08-07 88 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",