我想使用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一样慢...而且因为这是在每个页面加载时执行的,所以加快速度看起来是个好主意!
有几个这样的问题,我尝试了很多不同的东西,但我已经在这个查询中待了一个小时,我似乎无法按照我的意愿去工作: - (
谢谢!
答案 0 :(得分:1)
你可能想要showid上的最小值或最大值,然后不要将它包含在组中,我不知道哪个因为查看你的“首选”结果集,你有两个。
答案 1 :(得分:0)
如果您希望按eventId对数据进行分组,请按eventId进行分组,您将获得您正在寻找的结果。
这是一个MySQL功能(?),它允许您选择非聚合列,在这种情况下,它将返回第一行可用。在其他DBMS中,它是由DISTINCT ON实现的,这在MySQL中不可用。