MySQL 使用 GROUP BY 对多列进行分组

标签 mysql sql select group-by

我想使用 GROUP BY 多列,我认为最好从一个示例开始:

SELECT
    eventsviews.eventId,
    showsActive.showId,
    showsActive.venueId,
    COUNT(*) AS count
FROM eventsviews

INNER JOIN events ON events.eventId = eventsviews.eventId
INNER JOIN showsActive ON showsActive.eventId = eventsviews.eventId

WHERE events.status = 1

GROUP BY showsActive.venueId, showsActive.showId, showsActive.eventId
ORDER BY count DESC
LIMIT 100;

输出:

| *eventId* | *showId* | *venueId* | *count* |
+-----------+----------+-----------+---------+
  [...snip...]
| 95        | 92099    | 9770      | 32      |
| 95        | 105472   | 10702     | 32      |
| 3804      | 41225    | 8165      | 17      |
| 3804      | 41226    | 8165      | 17      |
| 923       | 2866     | 5451      | 14      |
| 923       | 20184    | 5930      | 14      |
  [...snip...]

我想要什么:

| *eventId* | *showId* | *venueId* | *count* |
+-----------+----------+-----------+---------+
| 95        | 92099    | 9770      | 32      |
| 3804      | 41226    | 8165      | 17      |
| 923       | 20184    | 5930      | 14      |

所以,我希望我的数据按 eventId 分组,但每个 showId 和venueId 只分组一次...

我实际上有一个 SQL 查询可以做到这一点,但它有 8 个子查询,并且像 T-Ford 一样慢......并且由于这是在每个页面加载上执行的,因此加快了速度看起来是个好主意!

有几个像这样的问题,我尝试了很多不同的事情,但我已经在这个查询上一个小时了,我似乎无法让它按照我想要的方式工作:-(

谢谢!

最佳答案

您可能想要 showid 的最小值或最大值,然后不将其包含在分组依据中,我无法分辨哪个,因为查看您的“首选”结果集,您两者都有。

关于MySQL 使用 GROUP BY 对多列进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8754985/

相关文章:

select - Cassandra 和使用计数器类型清理旧数据

postgresql - 如何在 PL/pgSQL IF 语句中运行 SELECT 查询

mysql - 将所有表从MySQL导入到Hive。我的命令出了什么问题?

php - 如何扩展GROUP_CONCAT值?

php - 进行自定义站点搜索的方法

mysql - 如何创建MySQL分层递归查询

mysql - mysql的bin目录在哪里?

php - WooCommerce 小部件 - 从日期到日期的订单列表

mysql - PHP MySQL 从 3 个表中选择

MySQL逻辑操作SELECT查询