如果需要對關聯查詢(inner join)做分組(group by),並且按照關聯表(actor)中的某個列進行分組,那么通常采用關聯表(actor)的標識列(actor_id)分組的效率比其他列更高:
select actor.first_name,actor.last_name,count(*) from film_actor inner join actor using(actor_id) group by actor.actor_id;
替換了
group by actor.first_name,actor.last_name
這個查詢利用了演員的姓名(first_name和last_name)和actor_id直接相關的特點,但是不是所有的關聯語句的查詢都可以改寫成select中直接使用非分組列(first_name,last_name)的形式的。甚至服務器設置sql_mode(ONLY_FULL_GROUP_BY)來禁止這樣的寫法。如果是這樣,可以用min(),max()函數繞過這樣的限制,但是一定要清楚,select后面出現的非分組列一定是直接依賴分組列,並且在每一個組內的值是唯一的,或者業務根本不在乎這個值具體是什么。
select min(actor.first_name),max(actor.last_name) .......