本系列出自《深入浅出MySQL》,全文以问答形式展开,是我的个人学习笔记。
先看花絮
Q:要用到ELSE吗?
A:看你咯,无所谓。
Q:如果没有ELSE而且列也不符合任何一个WHEN条件,会发生什么事?
A:在你想更新的列里面不会发生任何改变。
Q:如果我只想对部分列套用CASE表达式,应该怎么做呢?
A:可以加上WHERE,可以在END后加上WHERE子句。这样,CASE就只会套用在符合WHERE子句的列上。
CASE表达式可以搭配UPDATE以外的语句吗?
A:why not?
Q:讲到MIN,如果查询中的列有NULL,这会有上面影响吗?
A:好问题。NULL其实不会有影响,因为NULL代表此处无值,而不是此值为0.
看图:
现在怎么办?是像这样吗? :
这样要执行n次啊。。。
那有没有更好的办法,其实在主语言中,这不过就是个分支语句的事情嘛,奈何SQL语言我不熟啊。。。
没事,一直以来不懂,从今以后懂了:
UPDATE my_table
SET new_column =
CASE
WHEN column1 = somevalue1
THEN newvalue1
WHEN column2 = somevalue2
THEN newvalue2
ELSE newvalue3
END;
越靠前的列权重越高,拥有对后面列的一票否决权。
SELECT first_name,SUM(sales)
FROM cookie_sales
GROUP BY first_name
ORDER BY SUM(sales) DESC
;
SELECT first_name,AVG(sales)
FROM cookie_sales
GROUP BY first_name
ORDER BY AVG(sales) DESC
;
SELECT first_name,MAX(sales)
FROM cookie_sales
GROUP BY first_name
;
SELECT first_name,MIN(sales)
FROM cookie_sales
GROUP BY first_name
;
SELECT COUNT(sale_date)
FROM cookie_sales
;
SELECT DISTINCT sale_date
FROM cookie_sales
ORDER BY sale_date
;
SELECT COUNT(DISTINCT sale_date)
FROM cookie_sales
;
SELECT first_name,SUN(sales)
FROM cookie_sales
GROUP BY first_name
ORDER BY SUN(sales) DESC
LIMIT 2 OFFSET 4 --跳过两条,查询两条记录
--也可以这样写:LIMIT 4,2
;