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