我有一个名为 Tickets 的表,我用它来查找 2017 年售出门票的最大和最小月数。我尝试使用不同的查询,但找不到解决方案。
首先我尝试过:
SELECT
MIN(mycount) AS Lowest_Month,
MAX(mycount) AS Highest_Month
FROM
(
SELECT
month(purchase_date) Months,
count(purchase_date) AS mycount
FROM
tickets
WHERE
YEAR(purchase_date) = 2017
GROUP BY
month(purchase_date)
) a
这给了我 2017 年每月的总销售额。但是,我需要找到最大值和最小值的月份。然后我尝试了:
SELECT
MONTH(purchase_date),
COUNT(purchase_date) AS counts
FROM
tickets
WHERE
YEAR(purchase_date) = 2017
GROUP BY
MONTH(purchase_date)
HAVING
COUNT(purchase_date) = (
SELECT
MAX(counts) AS Highest_Month,
MIN(counts)
from
(
select
month(purchase_date),
COUNT(purchase_date) AS counts
FROM
tickets
GROUP BY
MONTH(purchase_date)
) as a
)
这也不起作用。有什么推荐吗?
答案 0 :(得分:0)
一种方法是:
with m as (
SELECT month(purchase_date) Months, count(*) AS mycount
FROM tickets
WHERE YEAR(purchase_date) = 2017
GROUP BY month(purchase_date)
)
select m.*
from m
where m.mycount in (select min(mycount)
from m
union all
select max(mycount)
from m
);
但是,我同样倾向于使用 UNION ALL
:
WITH m AS (
SELECT month(purchase_date) Months, count(*) AS mycount
FROM tickets
WHERE YEAR(purchase_date) = 2017
GROUP BY month(purchase_date)
)
SELECT m.*
FROM m
ORDER BY mycount ASC
FETCH FIRST 1 ROW ONLY
UNION ALL
SELECT m.*
FROM m
ORDER BY mycount DESC
FETCH FIRST 1 ROW ONLY;
并非所有数据库都支持标准的 FETCH FIRST
子句。您可能需要 LIMIT
或 SELECT TOP 1
以及可能需要对语法进行其他调整。