这是我正在看的两个表:
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
这应该工作:
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
所以我所做的是使用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