免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2757 | 回复: 7
打印 上一主题 下一主题

问一个mysql语句如何写 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-30 15:39 |只看该作者 |倒序浏览
10可用积分
mysql语法不太熟悉,这个需求也有点复杂,问题是这样的:
有一个表,定义为:


  1. CREATE TABLE IF NOT EXISTS t_play_info
  2. (
  3.         id                int                                NOT NULL AUTO_INCREMENT,
  4.         Fuid        int                                UNSIGNED NOT NULL DEFAULT 0,
  5.         Fcid        char(48)                NOT NULL DEFAULT '',
  6.         Fnum        int                                NOT NULL DEFAULT 0,       
  7.         PRIMARY KEY(id),
  8.         INDEX (Fcid, Fuid)
  9. );
复制代码


现在想查询同一个Fuid下面所有元素的Fnum之和最大者,也就是说,假如有以下数据:

+----+------+------+------+
| id | Fuid | Fcid | Fnum |
+----+------+------+------+
|  1 |    1 | cid1 |    1 |
|  2 |    1 | cid2 |    2 |
|  3 |    2 | cid2 |    2 |
+----+------+------+------+

那么Fuid为1时的Fnum总和最大,同时要求按照这个排序输出,即Fuid=1最大则优先输出所有与Fuid=1的列,然后再输出Fnum总和第二大的,以此类推.

mysql语句不太熟悉,谢谢帮忙.

最佳答案

查看完整内容

SELECT Fuid, SUM(Fnum)FROM t_play_infoGROUP BY FuidORDER BY SUM(Fnum) DESC

论坛徽章:
24
金牛座
日期:2013-10-18 21:35:56综合交流区版块每日发帖之星
日期:2015-08-15 06:20:00综合交流区版块每日发帖之星
日期:2015-09-30 06:20:00综合交流区版块每日发帖之星
日期:2015-10-16 06:20:03每日论坛发贴之星
日期:2015-10-16 06:20:03综合交流区版块每日发帖之星
日期:2015-10-24 06:20:00IT运维版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之天津
日期:2016-02-25 16:28:04综合交流区版块每日发帖之星
日期:2016-06-12 06:20:00每日论坛发贴之星
日期:2016-06-12 06:20:00综合交流区版块每日发帖之星
日期:2016-06-13 06:20:00综合交流区版块每日发帖之星
日期:2015-06-22 22:20:00
2 [报告]
发表于 2008-01-30 15:39 |只看该作者
SELECT Fuid, SUM(Fnum)
FROM t_play_info
GROUP BY Fuid
ORDER BY SUM(Fnum) DESC

论坛徽章:
0
3 [报告]
发表于 2008-01-30 16:06 |只看该作者
上面给的办法没有完全解决,可能是因为mysql语法不支持,后来在村夫指导下改用这样查询:

SELECT Fuid, SUM(Fnum) FROM t_play_info GROUP BY Fuid ORDER BY 2 DESC limit 0, 10;

这样查出的结果按照同一个uid进行了排序,依次取出来再按照该uid去查询相同uid的列即可,麻烦了一些需要查询两次,不过还是解决了问题.

论坛徽章:
0
4 [报告]
发表于 2008-01-30 16:53 |只看该作者
不是不支持,是写的不对:

SELECT a . *
FROM t_play_info a, (
    SELECT Fuid, sum( Fnum ) AS sumFnum
    FROM t_play_info
    GROUP BY Fuid
)b
WHERE a.Fuid = b.Fuid
ORDER BY b.sumFnum DESC

论坛徽章:
1
双子座
日期:2013-08-19 14:56:16
5 [报告]
发表于 2008-01-30 16:59 |只看该作者
原帖由 converse 于 2008-1-30 16:06 发表
上面给的办法没有完全解决,可能是因为mysql语法不支持,后来在村夫指导下改用这样查询:

SELECT Fuid, SUM(Fnum) FROM t_play_info GROUP BY Fuid ORDER BY 2 DESC limit 0, 10;

这样查出的结果按照同一个u ...

是要找出最大的那个  sum(Fnum) 对应的 Fuid
Fuid 只 取 最大那个吧

[ 本帖最后由 猪知猪之道 于 2008-1-30 17:01 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-01-30 17:23 |只看该作者
原帖由 sunnyfun 于 2008-1-30 16:53 发表
不是不支持,是写的不对:

SELECT a . *
FROM t_play_info a, (
    SELECT Fuid, sum( Fnum ) AS sumFnum
    FROM t_play_info
    GR ...


确实可以,谢谢了,我对sql不太熟悉,还得多学习,只是分数已经送出去了....

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2008-01-30 18:16 |只看该作者
咳 没赶上收分

论坛徽章:
0
8 [报告]
发表于 2008-01-31 09:28 |只看该作者

回复 #6 converse 的帖子

我的分啊......哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP