MySQL"为了通过"金额的行相同价值的某个专栏?
题
我有一个表叫 trends_points
, 这表以下列:
- id(unique id的行)
- userId(id的用户已进入这个表)
- 期(一个单词)
- 时间(a unix timestamp)
现在,我正在运行查询对此表其会得到的排在一个特定的时间框架下令通过多少次列 term
出现在该表中,在特定的时间内...因此,举例来说,如果表具有以下行:
id | userId | term | time
------------------------------------
1 28 new year 1262231638
2 37 new year 1262231658
3 1 christmas 1262231666
4 34 new year 1262231665
5 12 christmas 1262231667
6 52 twitter 1262231669
我会喜欢的排出来下令这样的:
new year
christmas
twitter
这是因为"新的一年"的存在的三倍的时间,"圣诞"的存在的两倍和"twitter"只有在一个行。
迄今为止我已经asummed这是一个简单的在于具体的时间框架的一部分,查询及团通过停止相同的术语来在列表中的两倍。
这使得以下问题:
SELECT *
FROM `trends_points`
WHERE ( time >= <time-period_start>
AND time <= <time-period_end> )
GROUP BY `term`
任何人都不会知道我怎么会做的最后一部分的查询?(订购查询的结果由有多少行包含相同的"术语"栏中的值..).
解决方案
使用:
SELECT tp.term,
COUNT(*) 'term_count'
FROM TREND_POINTS tp
WHERE tp.time BETWEEN <time-period_start> AND <time-period_end>
GROUP BY tp.term
ORDER BY term_count DESC, tp.term
记住可以有关系-所以由默认字母顺序排列短的期价值的时候发生这种情况,但也有可能是其他标准。
还有,如果你想另外的数量限制的行/条款回来了你可以加入的 LIMIT
条款 到底查询。例如,这种查询将回报最高的五个方面:
SELECT tp.term,
COUNT(*) 'term_count'
FROM TREND_POINTS tp
WHERE tp.time BETWEEN <time-period_start> AND <time-period_end>
GROUP BY tp.term
ORDER BY term_count DESC, tp.term
LIMIT 5
其他提示
快速回答:
SELECT
term, count(*) as thecount
FROM
mytable
WHERE
(...)
GROUP BY
term
ORDER BY
thecount DESC
SELECT t.term
FROM trend_points t
WHERE t.time >= <time-period_start> AND t.time <= <time-period_end>
ORDER BY COUNT(t.term) DESC
GROUP BY t.term
COUNT()
会给你的号码的行集团,因此只是为了通过。
SELECT * FROM `trends_points`
WHERE ( `time` >= <time-period_start> AND `time` <= <time-period_end> )
ORDER BY COUNT(`term`) DESC
GROUP BY `term`
不隶属于 StackOverflow