mySQL语句获取最后一条记录

时间:2016-01-27 19:37:08

标签: mysql sql

我试图获得每个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

3 个答案:

答案 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
相关问题