GROUP BY X, Y意思是将所有具有相同X字段值和Y字段值的记录放到一个分组里。
2、当对某字段使用聚合函数时,例如 sum(event_count),如果结果为空,则设为0:
isnull(sum(event_count), 0)
3、group by 、 having 、 order by
分组允许把数据分为多个逻辑组,以便能对每个组进行聚集计算。
GROUP BY子句中列出的每个列都必须是检索列(?)或有效的表达式
(但不能是聚集函数)。如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式。不能使用别名。
除聚集计算语句外, SELECT语句中的每个列都必须在GROUP BY子句中给出。例如:
SELECT EvalStep,Tactic,Technique ,isnull(sum(EventCount), 0) as sum_EventCount
FROM "represent_7" WHERE EvalPhase = 'Lateral Movemet'
group by EvalStep,Tactic ,Technique
该SQL语句是对相同的 EvalStep,Tactic ,Technique分成一组,然后计算每组EventCount的和。
select 可以不出现group by子句中的字段,例如:
SELECT isnull(sum(EventCount), 0) as sum_EventCount
FROM "represent_7" WHERE EvalPhase = 'Lateral Movemet'
group by EvalStep,Tactic ,Technique
如果去除了group by EvalStep,Tactic ,Technique子句, 如下图所示:
SELECT EvalStep,Tactic,Technique ,isnull(sum(EventCount), 0) as sum_EventCount
FROM "represent_7" WHERE EvalPhase = 'Lateral Movemet'
会报错 Cannot use non-grouped columns [EvalStep, Tactic, Technique], expected [],因为聚合函数需要结合group by来使用。
如果在select添加EventCount字段,而在group by 子句中没有EventCount字段,例如:
SELECT EvalStep,Tactic,Technique, EventCount FROM represent_7
WHERE EvalPhase = 'Lateral Movemet'
group by EvalStep,Tactic,Technique
也会报错:Cannot use non-grouped column [EventCount], expected [EvalStep, Tactic, Technique]。 因为同一个EvalStep, Tactic, Technique下会有不同的EventCount,无法确定组EvalStep, Tactic, Technique下的EventCount是多少。
可以不用分组,直接检索所需要的列,然后使用order by子句排序:
SELECT EvalStep,Tactic,Technique,EventCount FROM represent_7
WHERE EvalPhase = 'Lateral Movemet' order by EvalStep,Tactic,Technique
4、having 组级过滤
order by 排序用SELECT语句检索出的数据
5、上传csv文件
LOAD DATA INFILE 'csv_file_path'
INTO TABLE table_name
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;