簡體   English   中英

根據每組另一列中的最大值查找一列的值

[英]Find the value of one column based on maximum value in another column per group

我有一個查詢,該查詢為我提供三列:ID,事件的星期幾以及一周中每天發生的事件數,即

ID    Day_Name    Cnt
1     Thursday    1
2     Monday      3
2     Thursday    2
2     Sunday      2
3     Tuesday     7
3     Wednesday   3

我通過查詢得到這個

SELECT P.ID, DAYNAME(E.EVENT_DATE) AS Day_Name, COUNT(*) AS Cnt
FROM EVENT AS E

INNER JOIN PERSON AS P
ON P.ID_2 = E.ID_2

WHERE E.EVENT_DATE > '2016-01-01'
AND E.EVENT_STATUS LIKE '%OCCURED%'

GROUP BY P.ID, DAYNAME(E.EVENT_DATE)

我想減少此查詢,以只返回具有最大計數的每個用戶的星期幾。 同時,我想更改帶有計數的列,以顯示該工作日的事件發生頻率。 對於上面的示例,我想將輸出更改為

ID    Day_Name    Frequency
1     Thursday    1
2     Monday      0.429
3     Tuesday     0.7

謝謝有人知道

為了獲得預期的結果集,您可以在外部查詢中進行計算,例如

SELECT ID,
SUBSTRING_INDEX(GROUP_CONCAT(Day_Name ORDER BY Cnt DESC),',',1) Day_Name,
MAX(Cnt)/SUM(Cnt) Frequency
FROM(
    SELECT P.ID, DAYNAME(E.EVENT_DATE) AS Day_Name, COUNT(*) AS Cnt
    FROM EVENT AS E
    INNER JOIN PERSON AS P
    ON P.ID_2 = E.ID_2
    WHERE E.EVENT_DATE > '2016-01-01'
    AND E.EVENT_STATUS LIKE '%OCCURED%'
    GROUP BY P.ID, DAYNAME(E.EVENT_DATE)
) t
GROUP BY ID

所以這是部分答案...

SELECT a.*
  FROM ([your query here]) a
  JOIN 
     ( SELECT id,MAX(cnt) cnt FROM ([your query here]) GROUP BY id ) b
    ON b.id = a.id
   AND b.cnt = a.cnt;

要獲得更完整的答案,建議您提供原始的18行數據集。 請參閱: 為什么我應該提供MCVE,因為我認為這是一個非常簡單的SQL查詢?

暫無
暫無

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

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