如果妳想用sql找出答案,我在這裏寫了這段話:
首先,因為是同壹個表,結果是根據不同的條件拼接在壹起的,所以我能想到的就是使用left join。我根據不同情況將數據分為以下幾部分:
A節:名稱節作為left join的主表,只有名稱;
b區:早餐區;
C段:不吃早餐;
d段:我吃了晚餐段;
e段:不吃晚飯;
f段:我吃了米飯段;
G區:禁止進食區。
除了A段,其他各段都是根據自己的條件。
挑選
姓名,
計數(*)計數,
總和(重量),
然後通過左連接依次按名稱將所有段連接在壹起,最終的sql語句如下:
挑選
壹個名字,
if null(b . count,0)吃早餐的次數,
if null(b . sum,0)?早餐的重量,
if null(c . count,0)不吃早餐的次數,
if null(c . sum,0)?沒有早餐的重量,
if null(d . count,0)吃晚餐的次數,
if null(d . sum,0)?晚餐的分量,
if null(e . count,0)不吃晚餐的次數,
if null(e . sum,0)?沒有晚餐的重量,
if null(f . count,0)的進食次數,
if null(f . sum,0)?這頓飯的重量,
if null(g . count,0)不吃東西的次數,
if null(g . sum,0)?不吃東西的重量。
從
(選擇不同的名稱
從T)左連接
(選擇
姓名,
計數(*)計數,
重量總和
從T
其中類型= 0且狀態= 0
按名稱分組)b ON a.name = b.name
左連接
(選擇
姓名,
計數(*)計數,
重量總和
從T
其中類型= 0且狀態= 1
按名稱分組)c ON a.name = c.name
左連接
(選擇
姓名,
計數(*)計數,
重量總和
從T
其中類型= 1,狀態= 0
按名稱分組)d ON a.name = d.name
左連接
(選擇
姓名,
計數(*)計數,
重量總和
從T
其中類型= 1且狀態= 1
按姓名分組)e ON a.name = e.name
左連接
(選擇
姓名,
計數(*)計數,
重量總和
從T
其中狀態= 0
按名稱分組)f ON a.name = f.name
左連接
(選擇
姓名,
計數(*)計數,
重量總和
從T
其中狀態= 1
按名稱分組)g ON a.name = g.name
測試表結構是:
(因為連接是通過name字段建立的,條件是type和status,所以建議使用這三個字段作為索引。)
測試表測試數據為:
運行結果如下: