Mysql
 sql >> Database >  >> RDS >> Mysql

SQL ottiene ROW_NUMBER e COUNT su ogni richiesta SELECT

Questo probabilmente ha lo scopo di consentire l'impaginazione. Mostrare il numero totale di righe può essere molto costoso.

Un modo che ho trovato per funzionare bene su una varietà di database è dividere il lavoro in due parti. Innanzitutto, raccogli l'ID delle righe pertinenti in una tabella temporanea. In secondo luogo, esegui una query sul set di dati completo. I dati raccolti nella prima parte ti offrono un modo semplice per calcolare il numero totale di righe e gli ID delle righe in una determinata pagina.

Ecco un esempio approssimativo per SQL Server. Nota che l'esempio non si basa su funzioni della finestra come row_number() , che non sono disponibili in MySQL.

create table #id_list (rn int identity, pk int);

insert   #id_list
         (pk)
select   customer_id
from     customers
where    name like '%Joe%';

select   (select  count(*) from #id_list) as total_rows
,        rn -- The row's number
,        name
,        birth_date
,        ... -- Other columns
from     #id_list id
join     customer c
on       c.pk = c.customer_id
where    rn between 15 and 29; -- Second 15-row page 

A proposito, se possibile, restituirei questo requisito ai progettisti per ricontrollare se vale la pena dedicare molto tempo a questo. È molto più semplice se non è necessario visualizzare il numero totale di righe.