簡體   English   中英

如何從MySQL中的FROM字段中刪除子查詢

[英]How to remove a subquery from the FROM field in MySQL

我是MySQL和數據庫的新手,我在許多地方都看到,在MySQL的SELECT字段中使用子查詢並不是一個好的編程習慣,如下所示:

select userid, avg(num_pages) 
from (select userid , pageid , regid , count(regid) as num_pages 
      from reg_pag 
      where ativa = 1 
      group by userid, pageid) as from_query 
group by userid;

它計算用戶每頁的平均寄存器數。

reg_page表如下所示: reg_page表圖像

問題:

  1. 如何更改查詢,以便它不使用FROM字段中的子查詢?

  2. 是否有一種通常的方式來“扁平化”這樣的查詢?

一種方法是使用count(distinct)

select userid, count(*) / count(distinct pageid)
from reg_pag 
where ativa = 1
group by userid;

每個用戶每頁的平均寄存器數也可以計算為每個用戶的寄存器數除以每個用戶的頁數。 使用count distinct來計算每個用戶只有不同的psgeids:

select userid, count(regid) / count(distinct pageid) as avg_regs
from reg_pag 
where ativa=1
group by userid;

沒有通用的方法來展平這些查詢。 它甚至可能不會使其中的一些變平,否則首先要有這個功能是沒有意義的。 不要害怕在from子句中使用子查詢,在某些情況下,它們可能比扁平查詢更有效。 但這是供應商甚至特定版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM