[英]Better way to write MySQL sub-query
我的MySQL數據庫中有兩個表: allele
和locus
。 我想知道一個給定的基因座有多少個等位基因,以及那些有Tentative
狀態的等位基因。 我目前有以下查詢和子查詢:
SELECT COUNT(*) as alleleCount,
(SELECT COUNT(*)
FROM allele
INNER JOIN locus ON allele.LocusID = locus.PrimKey
WHERE Status = 'Tentative'
AND locus.ID = 762
) as newAlleleCount
FROM allele
INNER JOIN locus ON allele.LocusID = locus.PrimKey
WHERE locus.ID = 762
但我覺得必須有一種更好的方法來編寫此查詢。
您可以使用帶有條件的sum的SUM()
來產生布爾值1或0,因此它將為您提供條件的計數
SELECT locus.ID,COUNT(*) `all_alleles_per_locus`,
SUM(Status = 'Tentative') `tentative_alleles_762`
FROM allele
INNER JOIN locus ON allele.LocusID = locus.PrimKey
GROUP BY locus.ID
一種方法是按位置狀態分組,並獲取每個狀態的相應計數。 使用WITH ROLLUP
修飾符將在末尾添加NULL
狀態,代表總數:
SELECT status, COUNT(*)
FROM allele JOIN locus ON locus.PrimKey = allele.LocusID
WHERE locus.ID = 762
GROUP BY status WITH ROLLUP
如果您絕對不希望列出所有狀態,則可以改為GROUP BY status = 'Tentative'
(如果需要,可以選擇WITH ROLLUP
),但是它不是可精簡的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.