如何在加入另一个表之前找到一组数据的模式?

问题描述 投票:1回答:2

这是我正在看的两个表:

k3_alert_types

Type       Description

0            No Show
1            Stop Arrival
2            ...
3            ...
4            ...
5            ...

k3_alert

Type  

1
22
33
2
4
5
65
33
1

这些表只是示例,因为实际数据集要大得多。我想要做的是找到k3_alert表中的类型模式,我已经完成了以下操作:

SELECT TYPE , number_of_alerts
FROM
(

    SELECT id, TYPE, COUNT(TYPE) AS number_of_alerts FROM k3_alert
    GROUP BY TYPE
)t1
WHERE number_of_alerts IN
(

    SELECT MAX( count_type ) FROM
    (

        SELECT id, TYPE , COUNT(TYPE ) AS count_type FROM k3_alert
        GROUP BY TYPE
    )t
)

我知道如何加入两个表:

SELECT k3_alert_types.description, k3_alert_types.type as type
FROM k3_alert_types
INNER JOIN k3_alert ON k3_alert_types.type = k3_alert.type
ORDER BY type

但我不知道如何同时做两件事。

我希望看到这是整个过程的结果(只是一个例子):

Description  Type  number_of_alerts

No Show      1     350

有什么建议?

编辑:服务器类型:MariaDB,PHP扩展名:mysql

mysql sql join mode
2个回答
0
投票

这应该工作:

SELECT at.description, at.type, COUNT(*) as number_of_alerts
FROM k3_alert_types at
INNER JOIN k3_alert a ON at.type = a.type
GROUP BY at.description, at.type
ORDER BY number_of_alerts DESC 
LIMIT 1

0
投票

所以我所做的是使用CTE来存储模式的值,然后选择前1个。如果你想要更大的灵活性或拥有庞大的数据集,你可以使用临时表而不是CTE。

以下是代码:

   DECLARE @AlertType TABLE
(Type1 INT,
Descr varchar(20))
INSERT INTO @AlertType
(
    Type1,
    Descr
)
VALUES
(   1, 'Stop Arrival'),( 0,'No Show')


DECLARE @Alert TABLE
(Type1 INT)
INSERT INTO @Alert
(
    Type1
)
VALUES (1),(0),(1),(23),(1),(5),(1)




;WITH  CTE AS 
(SELECT  Type1, COUNT(*) AS number_of_alerts 
FROM @Alert
GROUP BY Type1
)

SELECT TOP 1 AT.Descr, t1.Type1, t1.number_of_alerts
FROM CTE AS t1
    JOIN @AlertType AS AT
        ON AT.Type1 = t1.Type1  
ORDER BY t1.number_of_alerts DESC 
© www.soinside.com 2019 - 2024. All rights reserved.