我试图获得每个FANOF_ID(例如我)的总票数。问题是,FAN每天都可以为同一个FANOF_ID投票(例如:David Bowie RIP)
所以每天我都可以投票给David Bowie作为我最喜欢的歌手
package controllers
import (
"github.com/astaxie/beego"
"solardatabase/models"
"solardatabase/dao"
"solardatabase/services"
)
type EventController struct {
beego.Controller
}
func (this *EventController) ListEvents() {
res := struct{ Tasks []*models.Event }{dao.GetAllEvents()}
this.Data["json"] = res
this.ServeJson()
}
func (this *EventController) ListEventsByRange() {
request, _ := models.CreateEventByTimeRangeRequest(this.Ctx.Input)
this.Data["json"] = dao.EventsByTimeRange(request)
this.ServeJson()
}
func (this *EventController) TemporalQuery() {
request, _ := models.CreateTemporalRequest(this.Ctx.Input)
this.Data["json"] = services.EventsByTimeFilter(request)
this.ServeJson()
}
因此,从这个例子中我应该得到2个粉丝的结果,总计'对于FANOF_ID(3)
这是我的实际SQL
ID CREATED FAN_ID FANOF_ID
15 2016-01-24 3 3
16 2016-01-25 3 3
17 2016-01-25 2 3
但它返回3条记录,即使我在fan_id上使用distinct也不会有效。如何让mySQL在FAN_ID上做一个截然不同的
我的SQL应该返回一条记录:
SELECT
distinct `fans_fanofvote`.`fan_id`,
COUNT(`fans_fanofvote`.`fanof_id`) AS `total`
FROM `fans_fanofvote`
GROUP BY `fans_fanofvote`.`fanof_id`
ORDER BY `total` DESC
答案 0 :(得分:1)
您之前没有提及预期的输出,因此令人困惑。
SELECT
`fans_fanofvote`.`fanof_id`,
COUNT(`fans_fanofvote`.`fan_id`) AS `total`
FROM `fans_fanofvote`
GROUP BY `fans_fanofvote`.`fanof_id`
ORDER BY `total` DESC
答案 1 :(得分:1)
你想要COUNT(DISTINCT)
。但是,您必须小心您的计算内容(fan_id
)以及您按(fanof_id
汇总的内容):
SELECT fov.fanof_id,
COUNT(DISTINCT fov.fan_id) AS total
FROM fans_fanofvote fov
GROUP BY fov.fanof_id
ORDER BY total DESC;
请注意,表别名使查询更易于阅读。除非确实需要,否则不要使用反向滴答。
答案 2 :(得分:0)
使用count(distinct)
SELECT
COUNT(distinct `fans_fanofvote`.`fanof_id`) AS `total`
FROM `fans_fanofvote`
GROUP BY `fans_fanofvote`.`fanof_id`
ORDER BY `tot