數(shù)據(jù)庫count distinct怎么用 sql怎么統(tǒng)計總共出產(chǎn)品種類有多少個?
sql怎么統(tǒng)計總共出產(chǎn)品種類有多少個?這個問題表達的很不清楚。表格結構是什么?具體統(tǒng)計要求不明確。1.如果有單獨的產(chǎn)品分類表和產(chǎn)品檔案表,統(tǒng)計有多少產(chǎn)品分類就很簡單了。書寫方法是:從產(chǎn)品分類表中選擇計
sql怎么統(tǒng)計總共出產(chǎn)品種類有多少個?
這個問題表達的很不清楚。表格結構是什么?具體統(tǒng)計要求不明確。
1.如果有單獨的產(chǎn)品分類表和產(chǎn)品檔案表,統(tǒng)計有多少產(chǎn)品分類就很簡單了。書寫方法是:從產(chǎn)品分類表中選擇計數(shù)。
2.如果只有產(chǎn)品檔案表,每個產(chǎn)品檔案信息包括產(chǎn)品分類名稱、產(chǎn)品編碼、產(chǎn)品名稱等字段。(其實這樣很不規(guī)范,不能保證分類的一致性)。統(tǒng)計了多少產(chǎn)品分類?寫:從產(chǎn)品文件表中選擇計數(shù)。
第三,從更復雜的應用來看,比如一個產(chǎn)品產(chǎn)出表,每個月生產(chǎn)的產(chǎn)品是不一樣的。如果想知道每個月生產(chǎn)多少類型的產(chǎn)品,可以這樣寫:選擇產(chǎn)品產(chǎn)量表,生產(chǎn)年份,產(chǎn)品產(chǎn)量表,生產(chǎn)月份,計數(shù)(產(chǎn)品檔案表,產(chǎn)品檔案表,產(chǎn)品檔案表,按產(chǎn)品產(chǎn)量表分組的產(chǎn)品代碼,產(chǎn)量。
count1和count0的區(qū)別?
第一,意義不同
Count(1)計算包括空值在內(nèi)的所有合格字段的數(shù)量。Count(0)將返回表中所有現(xiàn)有行的總數(shù),包括具有null值的行,而Count(列名)將返回表中除null(具有默認值的列也將被計算在內(nèi))和distinct列名之外的所有行的總數(shù),結果將是刪除null值和重復數(shù)據(jù)后的結果。
第二,角色不同
主要是想要count(1)對應的數(shù)據(jù)字段。
如果count(1)是聚集索引id,則它必須是count(1) fast。但是差別很小。由于count(*),分配給哪個字段將被自動優(yōu)化。所以不需要count(),使用count (*),SQL會幫你完成優(yōu)化。
第三,使用結果不同
當abc為空時,第二個不計入計數(shù),而第一個無條件計入計數(shù),按比例有一列數(shù)據(jù)。
字段名稱是abc
A
B
空
在這種情況下,第一個查詢是3,第二個查詢的結果是2。
分表過程中如何防止數(shù)據(jù)傾斜?
Mapjoin是一種避免數(shù)據(jù)傾斜的方法。
在映射階段允許連接操作。mapjoin將所有小表讀入內(nèi)存,在map階段直接將另一個表的數(shù)據(jù)與內(nèi)存中的數(shù)據(jù)進行匹配。因為連接操作是在map中進行的,所以歸約操作的效率會高很多。
在《hive:join遇到問題》有具體的操作。
在多個表上join的時候把小桌子放在join的左邊,大桌子放在Jion的右邊。
在執(zhí)行這樣的join連接時,小表中的數(shù)據(jù)會緩存在內(nèi)存中,可以有效降低內(nèi)存溢出錯誤的概率。
2.設置參數(shù)
真實的
還有其他參數(shù)。
3.SQL語言調(diào)整
例如,在“分組依據(jù)”維度中花費時間:使用sum() group by而不是count(distinct)來完成計算。
在reducer中執(zhí)行join操作時將小表放在內(nèi)存中,通過stream模式讀取大表。