2017 年售票最低和最高的月份是哪一个月?

时间:2021-04-02 23:13:20

标签: sql

我有一个名为 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
    )

这也不起作用。有什么推荐吗?

1 个答案:

答案 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 子句。您可能需要 LIMITSELECT TOP 1 以及可能需要对语法进行其他调整。

相关问题