簡體   English   中英

編寫MySQL子查詢的更好方法

[英]Better way to write MySQL sub-query

我的MySQL數據庫中有兩個表: allelelocus 我想知道一個給定的基因座有多少個等位基因,以及那些有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM