簡體   English   中英

按非匯總條件分組

[英]Group by non aggregate condition

組中是否可能有非匯總條件? 例如,我們有:

Table1(firstName, lastName, gender)

而且我們 firstName然后按lastName分組,但是我們只希望其中至少有5個男性的組。 另一個例子是沒有男性或類似條件的群體。 實際上,我通過使用case when解決了它,但是我正在尋找是否有直接的解決方案。 此問題的另一種形式是,當我們只希望包含至少一個年齡大於18歲的人的組或類似的問題時。

我不知道這是否類似於您的“用例解決方案”,但我認為這是最簡單的方法。

基本上,不只是計算,還可以求和與條件匹配的行數的總和,因此模式始終為: SUM(CASE WHEN <condition> THEN 1 [ELSE 0] END 。在HAVING子句中,可以按以下方式過濾聚合。

由於count不計算null ,因此您也可以將其寫為COUNT(CASE WHEN <condition> THEN 1 [ELSE null] END) 可以說這種方法比SUM方法更清晰,但我更習慣那種方法。

SELECT
  FirstName, LastName
FROM
  Table1
GROUP BY
  FirstName, LastName
HAVING 
  SUM(CASE WHEN Gender = 'M' THEN 1 ELSE 0 END) >= 5

以上條件適用於“至少5名男性”。

要寫“精確的3女人和至少一個18歲以上的人”,您可以這樣做:

HAVING 
  SUM(CASE WHEN Gender = 'F' THEN 1 ELSE 0 END) = 3
  SUM(CASE WHEN Age > 18 THEN 1 ELSE 0 END) >= 1

這些條件是分開工作的,因此在上述條件下,這個18歲的人可能是三個女人之一或一個男人。 但是您也可以結合案例中的條件。 例如:“至少5位18歲或以上的男人”:

HAVING 
  SUM(CASE WHEN Gender = 'M' AND Age >= 18 THEN 1 ELSE 0 END) >= 5

我希望這些示例可以幫助您找到所需的條件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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