2017-06-27 33 views
1

我有一張叫做'orders'的表,它記錄了一頓飯的訂單ID,一個訂購這頓飯和一頓飯的人的id它可以是1,2,或3)SQL-計算「類似」行的數量並將結果放在另一個表中

 orders 
oid | pid | meal 
________________ 
1 | 1 | 2 
2 | 1 | 3 
3 | 3 | 1 
4 | 5 | 2 
5 | 5 | 2 
6 | 5 | 1 

我想產生一個結果,讓我查看訂單數每餐每個PID:

pid | meal1 | meal2 | meal3 
____________________________ 
1 | 0 | 1 | 1 
3 | 1 | 0 | 0 
5 | 0 | 2 | 1 

我不是一個SQL專家,但我想我會先用pid把它分組,然後再用餐。但是,我將如何做計數?我真的迷失了。

+0

這就是所謂的支點。但是,mySQL不支持樞軸。所以這可以用case語句和一個和來完成。按用餐分組不成功,因爲您希望您的用餐#成爲不同的欄目。使用case語句,您可以爲每餐每一餐定義一個列#然後簡單地評估所討論的記錄是否爲1,2,3餐,然後總結結果。 – xQbert

回答

5

基本上你需要使用的情況下,當第一次創建不同的飯菜多列,那麼你可以通過組PID和概括起來

Select pid, sum(case when meal =1 then 1 else 0 end) as meal1, 
      sum(case when meal =2 then 1 else 0 end) as meal2, 
      sum(case when meal =3 then 1 else 0 end) as meal3 
from Table 
group by pid 
+0

它會在當前上下文中給出響應。如果Meal增加到1,2,3,4,5,那麼用戶將不得不每次都更新查詢。 –

+0

像xQbert提到的那樣,可以使用mySQL不支持的pivot來完成。如果我在編碼時遇到了這個問題,我會使用excel來生成所有這些情況,或者通過SAS連接並使用proc轉置。 –

+0

對不起,我不知道SAS並使用proc轉置方法。如果我們事先知道飯菜,我們只能生成病例陳述,如果查詢用於存儲過程,每次添加新餐時都需要更改。 –

相關問題