0
table account:
    acID (pri, uni, a-i)
    ...

table patient:
    paID (pri, uni, a-i)
    paAccountID (int, foreign key)
    ...

table test:
    tsID (pri, uni, a-i)
    tsAccountID (int, foreign key)
    tsPatientID (int, foreign key)
    tsStatus (int, ranges 0 to 3)
    tsFlag (int, ranges 0 to 1)

各患者からのデータpatientと数の取得:tsID

SELECT patient.*, Count(tsID) as tsCount   
FROM account 
LEFT JOIN patient ON acID = paAccountID
LEFT JOIN test ON paID = tsPatientID
WHERE paAccountID=1
GROUP BY paID

tsFlag=1ここで、 number of 、 number of tsStatus=0、 number of 'tsStatus=1' ... number ofを取得したいと思いますtsStatus=3

Explosion Pill の回答に感謝します。

SELECT patient.*, Count(tsID), SUM(tsStatus=0), 
SUM(tsStatus=1), SUM(tsStatus=2), SUM(tsStatus=3), SUM(tsFlag=1)
FROM account 
LEFT JOIN patient ON acID = paAccountID
LEFT JOIN test ON paID = tsPatientID
WHERE paAccountID=1
GROUP BY paID

魅力のように機能していますがNULLSUMもしそうなら、どうすれば代わりCount=0 に手に入れることができますか?0

4

1 に答える 1

3

X = Yのカウントは、SUM:を使用して取得できます。

SELECT patient.*, SUM(tsStatus = 1) AS tsStatus1
FROM ...

他の列に対してもこれを行うことができます。

IFNULLまたはを使用COALESCEして、デフォルトのnull以外の値を指定できます。

IFNULL(SUM(tsStatus = 3), 0);
于 2013-02-18T23:53:38.000 に答える