Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在子查询中添加第二个外部查询_Mysql_Sql - Fatal编程技术网

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次,为什么要这样做?