簡體   English   中英

COUNT個最高的MySQL GROUP BY字段(基於JOIN)

[英]MySQL GROUP BY field with highest COUNT (based on JOIN)

SELECT COUNT(dev_link.id) c, pattern.direction, pattern.section, (
    SELECT to_stop AS `stop`
    FROM dev_link d
    WHERE d.section = section
    ORDER BY d.sequence DESC
    LIMIT 1
) code
FROM pattern
INNER JOIN dev_link ON dev_link.section = pattern.section
WHERE pattern.service = "YSEO252"
GROUP BY pattern.code
ORDER BY c DESC

在此處輸入圖片說明

上面是一個查詢及其結果。 當前,這選擇了太多數據,我需要將其縮小到以下范圍:

第一行的方向為outbound ,另一行的方向為inbound 如果僅僅是我可以輕松地按方向GROUP BY 但是,我需要選擇具有最高c值的inboundoutbound行。 因此,將根據第一行和第三行上方的結果進行選擇。

如何更改查詢以使其返回這些行?

我將使用變量來模擬row_number()

SELECT * FROM (
    SELECT * , 
        @rn := if(@prevDirection = direction, @rn + 1, 1) as rn,
        @prevDirection := direction,
    FROM (
        SELECT COUNT(dev_link.id) c, pattern.direction, pattern.section, (
            SELECT to_stop AS `stop`
            FROM dev_link d
            WHERE d.section = section
            ORDER BY d.sequence DESC
            LIMIT 1
        ) code
        FROM pattern
        INNER JOIN dev_link ON dev_link.section = pattern.section
        WHERE pattern.service = "YSEO252"
        GROUP BY pattern.code
    ) t1 ORDER BY direction, c DESC
) t1 WHERE rn = 1
( SELECT ... WHERE ... AND pattern.direction='inbound' ... LIMIT 1)
UNION ALL
( SELECT ... WHERE ... AND pattern.direction='outbound' ... LIMIT 1 );

否則,每個SELECT都將與原始SELECT相似。

您只需要在group by子句中另外使用MAX函數,例如:

SELECT MAX(c)
FROM mytable
GROUP BY direction

您必須使用having子句。

SELECT COUNT(dev_link.id) c, pattern.direction, pattern.section, (
    SELECT to_stop AS `stop`
    FROM dev_link d
    WHERE d.section = section
    ORDER BY d.sequence DESC
    LIMIT 1
) code
FROM pattern
INNER JOIN dev_link ON dev_link.section = pattern.section
WHERE pattern.service = "YSEO252"
GROUP BY pattern.code
HAVING COUNT(dev_link.id) = MAX(COUNT(dev_link.id))
ORDER BY c DESC

暫無
暫無

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

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