[英]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.