Mysql 在子查询中添加第二个外部查询
我在下面有一个查询,它给出了中位数,我想把我的计数(*)放在一个单独的子查询中,计算中位数计算中使用的行总数(因为这样运行会更好)。最好的方法是什么?谢谢大家!Mysql 在子查询中添加第二个外部查询,mysql,sql,Mysql,Sql,我在下面有一个查询,它给出了中位数,我想把我的计数(*)放在一个单独的子查询中,计算中位数计算中使用的行总数(因为这样运行会更好)。最好的方法是什么?谢谢大家! SELECT our_id, AVG(1.0 * our_val) as Median FROM ( SELECT our_id, our_val, COUNT(*) OVER (PARTITION BY our_id) AS cnt, ROW_NUMBER() OVER (PARTITION BY our_id ORDER
SELECT our_id, AVG(1.0 * our_val) as Median
FROM
( SELECT our_id, our_val,
COUNT(*) OVER (PARTITION BY our_id) AS cnt,
ROW_NUMBER() OVER (PARTITION BY our_id ORDER BY our_val) AS rn
FROM our_table
) AS x
WHERE rn IN ((cnt + 1)/2, (cnt + 2)/2) GROUP BY our_id;
您正在子查询中计算
count(*)
。为什么不直接用它呢
SELECT our_id, AVG(1.0 * our_val) as Median, cnt
FROM (SELECT our_id, our_val,
COUNT(*) OVER (PARTITION BY our_id) AS cnt,
ROW_NUMBER() OVER (PARTITION BY our_id ORDER BY our_val) AS rn
FROM our_table
) x
WHERE rn IN ((cnt + 1)/2, (cnt + 2)/2)
GROUP BY our_id, cnt;
请显示您想要的值。我不想要diff值,只是想知道如何保持相同的输出,而是将count(*)移动到不同的子查询。我的意思是我不想在输出中有差异,我被告知将此查询调整到count(*)在单独的子查询中的位置,这样它会运行得更好?那你认为不需要吗?这就跟我的一样好吗?thnx@Chris90 . . . 我怀疑您是否会注意到此查询中包含此信息的性能差异。我不想在查询输出中包含cnt,我被告知要将计数*)移动到另一个子查询?或者这是不需要的?如何使它是最佳的,如果在一个单独的子查询中计数,您将强制对表进行两次扫描,而不是1次,为什么要这样做?