当前位置: 首页 > 知识库问答 >
问题:

一个表中最常出现在另一个表中的MYSQL条目

通京
2023-03-14

我有2张桌子,有作者和书

SELECT @maxCount := (MAX(counter)) FROM (SELECT count(*) AS counter FROM books GROUP BY authorId) AS counts;
SELECT * 
FROM authors 
WHERE authorId IN (
    SELECT authorId 
    FROM books 
    GROUP BY authorId 
    HAVING COUNT(*) = @maxCount
);

我被告知不允许使用变量,并且如果表变得很大,我所做的工作效率会非常低。

我是不是漏掉了什么明显的东西?有没有一种方法可以在一个语句中实现这一点,而不需要变量(或临时表),并且不必对整个books表进行两次选择/分组?

共有1个答案

严知
2023-03-14
SELECT author, COUNT(*)
FROM authors
JOIN books
ON authors.authorId=books.AuthorId
GROUP BY author
ORDER BY COUNT(*) DESC

会给你一个按每个作者的书数排序的列表。我附近没有可供测试的实例,并且倾向于避开嵌入式变量,但期望出现类似....

SELECT *
FROM (
  SELECT author
  , @maxcount:=IF(COUNT(*)>@maxcount,COUNT(*), @maxcount) 
  , COUNT(*) AS cnt
  FROM authors
  JOIN books
  ON authors.authorId=books.AuthorId
  GROUP BY author
  ORDER BY COUNT(*) DESC
) ilv
WHERE cnt=@maxcount;

对于大型数据集(即使有正确的索引),性能仍然很差。如果您必须经常使用大于100,000条记录来运行此查询,那么您可能会考虑对数据进行反常态化处理。

 类似资料:
  • 问题内容: 我在尝试从不在另一个表中的表中选择特定条目时在MySQL中遇到问题。我知道这句话听起来很疯狂,但这是我要尝试的一个例子。 表用户: 表文章: 表格视图(如果用户查看了特定的文章,则用于存储数据): 现在,我试图选择那些尚未阅读特定文章的用户,例如ID为10的文章。因此,他们在views表中没有条目。 我希望现在更有意义。感谢您的回答。V. 问题答案:

  • 问题内容: 我正在尝试根据另一个MySQL信息更新一个MySQL表。 我的桌子看起来像: 而表如下所示: 我想更新在与来自基于(存储在字符串字段)。 希望更新后的表如下所示: 我有一个有效的查询,但是非常慢: 这使我的CPU耗尽,最终导致超时,并且仅执行了一部分更新(有数千个要匹配的值)。我知道匹配的速度会很慢,但这是我必须将它们匹配在一起的唯一数据。 有没有更好的方法来更新这样的值?如果可以更快

  • 问题内容: 我有两个具有相同结构的表。我需要从一个表中选择数据,然后将它们存储到另一个表中。 我怎样才能做到这一点? 问题答案: 因为它们是相同的结构,所以您可以做

  • 我有两个表用于我的在线订单:product\u items 产品项包含销售价格、数量和成本价格。订单表包括成本、装运和货币 我想获得所有订单(按货币分组)的所有销售价格(*数量)和成本价格(*数量)以及成本装运的总和 问题是,当我将成本加起来时,订单中每个项目的成本加起来(因为它们是合并的) 因此,如果订单1有2个项目,运费为10欧元,那么它将退回20欧元。 如果我不加运费,那么我只得到最后一个值

  • 问题内容: 我想从一个表中读取所有数据,然后将一些数据插入到另一个表中。我的查询是 但我有一个错误 请帮我。 问题答案: 您可以使用INSERT … SELECT语法。请注意,您可以在SELECT部分​​中直接引用“ 1”。

  • 问题内容: 如何选择一个表中所有未出现在另一表中的行? 表格1: 表2: 表1中不在表2中的行的示例输出: 也许这样的事情应该工作: 问题答案: 如果您在另一条注释中提到有300列,并且想要对所有列进行比较(假设这些列的名称相同),则可以使用a 隐式联接两个表之间所有匹配的列名称,以便不必繁琐地手动输入所有加入条件: