簡體   English   中英

這 2 個使用 Count 函數的 select 語句之間有什么區別? SQL Oracle

[英]What is the difference between these 2 select statements that use Count functions? SQL Oracle

Select Rating_Code as "Rating", Count(Rating_code) as "Total Movies"
From Movie
Group by Rating_code
Order by count(Rating_code) desc;

Select Rating_Code as "Rating", Count(*) as "Total Movies"
From Movie
Group by Rating_code
Order by count(*) desc;

從我所看到的來看,他們給出了相同的結果

另外,什么時候使用Count(rating_code)而不是Count(*)

將 count 與列名一起使用只會計算非空值。 如果你有未分級的電影,你的情況會有所不同,看看這個小提琴

在此處輸入圖像描述

如果您按其他列分組,而不是(僅)Rating_code ...

有關 count(1) 優於 count(*) 的偏好,請參閱 Koen Lostrie 的評論。

COUNT文檔

如果指定 expr,則 COUNT 返回 expr 不是 null 的行數。 ...如果您指定星號 (*),則此 function 將返回所有行,包括重復行和空行。

當您按列分組並計算同一列時,您的情況有點特殊,這有點不尋常。 我想說,您的第二個查詢使用更廣泛且易於理解。 閱讀您的第一個查詢的人可能需要暫停,檢查列的可空性並嘗試了解您的目標是什么。

我相信列語法的出現是為了回答諸如“有多少電影被評分”和“有多少不同的評分代碼”之類的問題:

SELECT COUNT(rating_code), COUNT(DISTINCT rating_code) FROM movie;

暫無
暫無

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

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