Mysql 関数の百科事典 + ケース演習

関数

関数は、Java でメソッドを呼び出します。MySQL 関数は、渡されたパラメーターを処理し、処理結果を返します。つまり、値を返します。

MySQL には多数の豊富な関数が含まれており、数値関数、文字列関数、日付と時刻の関数、集計関数など、MySQL の一般的に使用される関数を簡単に分類できます。

MySQL 数値関数

効果 関数名
絶対値を求める ABS
平方根を見つける SQRT
残りを見つける モッド
2 つの関数は同じ関数を持ち、どちらもパラメーター以上の最小の整数を返します。つまり、切り上げます。 CEILとCEILING
切り捨て、戻り値は BIGINT に変換されます
0 から 1 の間の乱数を生成します。入力整数パラメーターを使用して、繰り返しシーケンスを生成します ランド
渡されたパラメータを丸める ラウンド
2つの関数の機能は同じで、どちらも渡されたパラメータのべき乗の結果値です パウアンドパワー
正弦を求める
関数 SIN の逆関数である逆正弦値を求めます。 ASIN
コサインを求める COS
関数 COS の逆関数である逆余弦値を求めます。 ACOS
接線を見つける タン
関数TANの逆関数である逆正接値を見つけます 日焼け
コタンジェントを求める ベビーベッド

MySQL 文字列関数

関数名 効果
長さ 文字列長関数を計算し、文字列のバイト長を返します
CONCAT マージ文字列関数。返される結果は、パラメーターを接続することによって生成された文字列であり、パラメーターは 1 つ以上にすることができます。
CONCAT_WS 複数の文字列を統一された形式で連結できる CONCAT のバリアント
入れる 置換文字列関数の添え字は 1 から始まります INSERT(idcard,2,2,'**') : ID カード番号を 2 番目から始まる 2 つの連続する番号に置き換えます
低い 文字列内の文字を小文字に変換する
アッパー 文字列内の文字を大文字に変換する
左の単語から文字列を傍受し、文字列の左側にいくつかの文字を返します
右の単語から文字列を傍受し、文字列の右側にいくつかの文字を返します
トリム 文字列の左右のスペースを削除する
交換 指定された文字列を新しい文字列に置き換えます
サブストリング 文字列を傍受し、指定された位置から始まる指定された長さの文字を返します
逆行 文字列逆(逆順)関数、元の文字列の逆順で文字列を返します

MySQL の日付と時刻の関数

関数名 効果
CURDATE と CURRENT_DATE 2 つの関数は同じ効果があり、年、月、日のみを含む現在のシステムの日付を返します SELECT CURDATE()、SELECT CURRENT_DATE()
CURTIME と CURRENT_TIME 2 つの関数は同じ効果があり、現在のシステムの時間値を返します。
NOW と SYSDATE 2 つの関数は同じ効果があり、現在のシステムの日付と時刻の値を返します。
UNIX_TIMESTAMP タイムスタンプを取得するか、指定された日付をタイムスタンプに変換します
FROM_UNIXTIME タイムスタンプを日付に変換 UNIX_TIMESTAMP(), UNIX_TIMESTAMP('2022-05-30')
指定された日付の月を取得します
月名 指定された日付の月の英語名を取得します
DAYNAME 指定された日付に対応する曜日の英語名を取得します
曜日 指定された日付に対応する週のインデックス位置の値を取得します。日曜日は 1、月曜日は 2 です...
戻り値が 0 ~ 52 または 1 ~ 53 の範囲内であるかどうかにかかわらず、指定された日付の年の週を取得します
DAYOFYEAR 指定された日付の年間通算日を取得し、戻り値の範囲は 1 ~ 366 です
DAYOFMONTH 指定された日付の日付を取得し、戻り値の範囲は 1 ~ 31 です
年を取得します。戻り値の範囲は 1970 ~ 2069 です
TIME_TO_SEC 時間パラメータを秒に変換 TIME_TO_SEC('2022-05-19 15:14:08')
SEC_TO_TIME 秒を時間に変換します。これは、TIME_TO_SEC の逆関数です。
DATE_ADD と ADDDATE 2 つの関数の機能は同じで、どちらも指定された時間間隔を日付に追加します DATE_ADD('2022-05-19 15:14:08', INTERVAL 1 DAY)
DATE_SUB と SUBDATE 2 つの関数は同じ関数を持ち、どちらも日付から指定された時間間隔を減算します DATE_SUB('2022-05-19 15:14:08', INTERVAL 1 DAY)
ADDTIME 时间加法运算,在原始时间上添加指定的时间ADDTIME('2022-05-19 15:14:08','10:00:00')
SUBTIME 时间减法运算,在原始时间上减去指定的时间SUBTIME('2022-05-19 15:14:08','10:00:00')
DATEDIFF 获取两个日期之间间隔,返回参数 1 减去参数 2 的值
DATE_FORMAT 格式化指定的日期,根据参数返回指定格式的值,这个转换格式与Java不同 如 %Y-%m-%d %H:%i:%s
WEEKDAY 获取指定日期在一周内的对应的工作日索引周一是0,周二是1.......

MySQL 聚合函数

函数名称 作用
MAX 查询指定列的最大值
MIN 查询指定列的最小值
COUNT 统计查询结果的行数
SUM 求和,返回指定列的总和
AVG 求平均值,返回指定列数据的平均值

MySQL 流程控制函数

函数名称 作用
IF(v,v1,v2) 判断v值,如果符合返回v1,不符合返回v2,流程控制
IFNULL(v1,v2) 判断是否为空,v1不为空返回自己,为空返回v2
CASE WHEN... THEN WHEN...THEN ... ELSE ... END 搜索语句,类似于Java中的if .... else if .... else
CASE ... WHEN ... THEN WHEN...THEN ... ELSE ..END 搜索语句,类似于Java中的Switch case

SQL练习

第一题:请你从exam_record数据表中计算所有用户完成SQL类别高难度试卷得分的截断平均值(去掉一个最大值和一个最小值后的平均值)examination_info(exam_id试卷ID, tag试卷类别, difficulty试卷难度, duration考试时长, release_time发布时间)

SELECT
	tag,
	difficulty,
	round(( sum( score ) - max( score ) - min( score )) / ( count( score ) - 2 ), 1 ) AS clip_avg_score 
FROM
	exam_record
	LEFT JOIN examination_info ON exam_record.exam_id = examination_info.exam_id 
WHERE
	tag = "SQL" 
	AND difficulty = "hard"

第二题:展示出第一张表所有数据,90分以上为优,80-90良,60-80中 小于60为不及格。

SELECT id,uid, CASE WHEN score >90 THEN '优'
                 WHEN score >80 AND score< 90 THEN '良'
                 WHEN score >60 AND score< 80 THEN '中'
								 WHEN score< 60 THEN '不及格'                              
    	       ELSE  '未知' END 
 FROM exam_record    

 第三题:求出每个用户每个科目的平均值,并将科目放到表头(行转列)

SELECT
	er.id,
	er.uid,
	er.exam_id,
	avg( CASE ei.tag WHEN 'SQL' THEN er.score END ) AS 'sql',
	avg( CASE ei.tag WHEN '算法' THEN er.score END ) AS '算法' 
FROM
	exam_record er
	JOIN examination_info ei USING ( exam_id ) 
GROUP BY
	er.uid

Guess you like

Origin blog.csdn.net/weixin_45934981/article/details/130213839