SELECT AVG(t1.evaluate_result) as median FROM (SELECT @rownum:=@rownum+1 as `row_number`, evaluate_result FROM (SELECT evaluate_result FROM pms_product WHERE evaluate_result IS NOT NULL ORDER BY evaluate_result) as tmp1 JOIN (SELECT @rownum:=0) as tmp2 ) as t1, ( SELECT count(1) as total_rows FROM pms_product WHERE evaluate_result IS NOT NULL ) as t2 WHERE 1 AND t1.row_number in (floor((total_rows+1)/2), floor((total_rows+2)/2)); 解释一下这条SQL
时间: 2023-06-12 21:06:59 浏览: 159
这条SQL语句的作用是计算具有非空评价结果的pms_product表中所有记录的中位数。以下是每个子查询的作用:
1. 子查询t1:将pms_product表中具有非空评价结果的记录按照评价结果从小到大排序,并在每行记录前添加一个行号。行号的初始值为0,这是通过使用MySQL内置变量@rownum实现的。然后,t1从排序后的结果中选择中位数所对应的两个行号(如果总行数为奇数,则为中间行号;如果总行数为偶数,则为中间两行的行号)并计算这些行的平均评价结果。
2. 子查询t2:计算具有非空评价结果的pms_product表中的记录总数。
最终的查询将两个子查询的结果结合起来,以计算中位数。
阅读全文