【发布时间】:2012-01-06 08:03:18
【问题描述】:
我想使用 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/venueId?