关于#mysql#的问题:mysql统计每科前几名

mysql统计每科前几名 为什么不能group by group by

怎么写

先明确下你的数据表的结构和字段,以及你想要统计的指标,如果不能用,用子查询也可以

这样?

select * from ( SELECT
  MONTH(时间)  ,
  人员,
  SUM(交易量)  交易量 
FROM
  TABLE 
GROUP BY
  MONTH(时间),
  人员
ORDER BY
  交易量 DESC ) temp limit 20

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/648500
  • 这篇博客也不错, 你可以看下mysql使用group by导致数据随机的解决办法
  • 你还可以看下mysql参考手册中的 MySQL 函数和运算符 GROUP BY 修改器
  • 除此之外, 这篇博客: 面试被问mysql性能优化,你知道别人都是怎么回答的吗,看完这篇保你成功!!!中的 利用到松散索引扫描实现 GROUP BY,需要至少满足以下几个条件: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • GROUP BY 条件字段必须在同一个索引中最前面的连续位置
    • 在使用 GROUP BY 的同时,只能使用 MAX 和 MIN 这两个聚合函数
    • 如果引用到了该索引中 GROUP BY 条件之外的字段条件的时候,必须以常量形式存在
  • 您还可以看一下 刘运强老师的MySQL数据库从入门到实战课课程中的 GROUP BY和HAVING的使用小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    根据问题描述,你希望根据月份统计每个拓展人的交易量前20的商户。你尝试使用MySQL的GROUP BY语句,但似乎不能得到正确的结果。以下是我给出的解决方案:

    1. 首先,你需要确保你的交易量数据和商户数据存在于同一个表中。假设你的表名为transactions,字段包括:transaction_id, merchant_id, extension_id, transaction_date, transaction_amount。
    2. 使用以下SQL语句获取每个拓展人每个月的交易总量:

    sql SELECT MONTH(transaction_date) AS month, extension_id, SUM(transaction_amount) AS total_amount FROM transactions GROUP BY MONTH(transaction_date), extension_id

    这会得到一个结果集,包含每个月和拓展人的交易总量。 3. 然后,你可以使用以下SQL语句获取每个拓展人每个月交易总量前20的商户:

    sql SELECT t.month, t.extension_id, t.total_amount, m.merchant_id, m.merchant_name FROM ( SELECT MONTH(transaction_date) AS month, extension_id, SUM(transaction_amount) AS total_amount FROM transactions GROUP BY MONTH(transaction_date), extension_id ) t JOIN ( SELECT transaction_date, extension_id, merchant_id, merchant_name FROM transactions JOIN merchants ON transactions.merchant_id = merchants.merchant_id ) m ON t.month = MONTH(m.transaction_date) AND t.extension_id = m.extension_id ORDER BY t.month, t.total_amount DESC LIMIT 20

    这会得到一个结果集,包含每个拓展人每个月交易总量前20的商户的信息,按照月份和交易总量降序排列。

    请注意,以上SQL语句假设你的表结构是合适的,并且你已经根据需要创建了合适的索引。据参考资料提到,你可能需要在适当的字段上创建索引来优化排序操作。如果你的表结构或数据有所不同,你可能需要根据实际情况进行适当的调整。

    我希望以上解决方案对你有所帮助。如果你还有任何问题,请随时提问。