【问题标题】:i want to display highest no. of episodes我想显示最高编号。剧集
【发布时间】:2016-12-17 18:40:52
【问题描述】:

我有以下代码

SELECT PRESENTERS.PNRFNAME, PRESENTERS.PNRLNAME, 
COUNT(EPISODES.PRESENTERID) AS "no. of episodes"
FROM EPISODES
JOIN PRESENTERS
ON EPISODES.PRESENTERID=PRESENTERS.PRESENTERID
GROUP BY PRESENTERS.PNRFNAME, PRESENTERS.PNRLNAME
ORDER BY COUNT(EPISODES.PRESENTERID)

我尝试添加

HAVING COUNT(EPISODES.PRESENTERID) > 2 

但我必须假装我没见过多少不。剧集有没有其他方法可以显示没有更多的行。第几集?

【问题讨论】:

  • 如果第一名出现平局怎么办?
  • 您接受了TOP 1查询的答案。您使用的是MySQL 还是SQL-Server?

标签: mysql sql join group-by sql-order-by


【解决方案1】:
    select top 1 PRESENTERS.PNRFNAME, PRESENTERS.PNRLNAME,COUNT(EPISODES.PRESENTERID) AS "no. of episodes" FROM EPISODES JOIN PRESENTERS ON EPISODES.PRESENTERID=PRESENTERS.PRESENTERID GROUP BY PRESENTERS.PNRFNAME, PRESENTERS.PNRLNAME ORDER BY COUNT(EPISODES.PRESENTERID) desc;

【讨论】:

    【解决方案2】:

    如果您只想要集数最多的行,您可以在查询末尾添加此行(并删除HAVING,它没用):

    ORDER BY `no. of episodes` DESC
    LIMIT 1
    

    这个想法:你对你的行进行排序,使剧集最多的记录在顶部,然后你将你的结果限制在一个特定的数字(这里是 1)。

    您错过了DESC 关键字,因为默认情况下按从低到高排序(ASC,升序)。

    【讨论】:

    • 使用反引号代替双引号。
    【解决方案3】:

    你不需要having,你只需要order by COUNT(EPISODES.PRESENTERID) DESC,这应该让你从高到低

    【讨论】:

    • 我想要一个编号最高的行。剧集
    【解决方案4】:

    默认情况下,MySQL 按升序对行进行排序。您需要明确告诉它按降序对其进行排序。

    SELECT PRESENTERS.PNRFNAME, PRESENTERS.PNRLNAME, 
    COUNT(EPISODES.PRESENTERID) AS "no. of episodes"
    FROM EPISODES
    JOIN PRESENTERS
    ON EPISODES.PRESENTERID=PRESENTERS.PRESENTERID
    GROUP BY PRESENTERS.PNRFNAME, PRESENTERS.PNRLNAME
    ORDER BY COUNT(EPISODES.PRESENTERID) DESC;
    

    以上将为您提供降序或以下的所有行,但是如果您只想要一个最高计数为 episodes 的行,您可以执行 limit 1

    SELECT PRESENTERS.PNRFNAME, PRESENTERS.PNRLNAME, 
    COUNT(EPISODES.PRESENTERID) AS "no. of episodes"
    FROM EPISODES
    JOIN PRESENTERS
    ON EPISODES.PRESENTERID=PRESENTERS.PRESENTERID
    GROUP BY PRESENTERS.PNRFNAME, PRESENTERS.PNRLNAME
    ORDER BY COUNT(EPISODES.PRESENTERID) DESC LIMIT 1;
    

    【讨论】:

      【解决方案5】:

      只需将DESC 附加到您当前的查询中,就可以了!

      SELECT        PRESENTERS.PNRFNAME, PRESENTERS.PNRLNAME, COUNT(EPISODES.PRESENTERID) AS [no. of episodes]
      FROM            EPISODES INNER JOIN
                               PRESENTERS ON EPISODES.PRESENTERID = PRESENTERS.PRESENTERID
      GROUP BY PRESENTERS.PNRFNAME, PRESENTERS.PNRLNAME
      ORDER BY [no. of episodes] DESC
      

      期望的输出:

      要选择前 1 名:

      SELECT        TOP (1) PRESENTERS.PNRFNAME, PRESENTERS.PNRLNAME, COUNT(EPISODES.PRESENTERID) AS [no. of episodes]
      FROM            EPISODES INNER JOIN
                               PRESENTERS ON EPISODES.PRESENTERID = PRESENTERS.PRESENTERID
      GROUP BY PRESENTERS.PNRFNAME, PRESENTERS.PNRLNAME
      ORDER BY [no. of episodes] DESC
      

      【讨论】:

        猜你喜欢
        • 2020-01-07
        • 1970-01-01
        • 2021-07-14
        • 2015-11-01
        • 2022-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-14
        相关资源
        最近更新 更多