1
我想弄清楚如何做一些更高级的SQL功能(至少对我来说是先进的)。SQL总结和平均查询与
我想借以下数据:
- 只有从第1轮使用的数据和2
- 总结分,每名
- 显示总和数据轮1和2为每个不同的名称
这是我做一个简单的例子的数据表:
Table: tblPoints
ID NAME ROUND POINTS
---------------------------
1 Dummy 1 30
2 Yes 1 45
3 Hi 1 20
4 Dummy 2 45
5 Yes 2 15
6 Hi 2 65
7 Newbie 2 10
8 Dummy 3 150
9 Yes 3 120
10 Hi 3 145
这是我想看到什么(通知再次它只是轮1和2):
NAME SUM_POINTS_EVERYONE SUM_POINTS COUNT_NAMES
------------------------------------------------------
Dummy 230 75 4
Yes 230 60 4
Hi 230 85 4
Newbie 230 10 4
我开始使用此只选择我要查房,并得到新的列2:
SELECT name,
(SELECT SUM(points) FROM tblPoints WHERE round IN (1, 2)) AS sum_points_everyone,
(SELECT COUNT(DISTINCT name) FROM tblPoints WHERE ROUND IN (1, 2)) AS count_names
FROM tblPoints
WHERE round IN (1, 2);
自定义行的公式如下:
萨姆指向 =总结了玩家对轮1和2的名称的点(在这种情况下)
琛指出大家 =总结了所有的唯一名称
由于从轮1和2每个人点(在这种情况下)
伯爵的名字 =的COUNT()你可以看到,我可以得到SUM_POINTS_EVERYONE和COUNT_NAMES行,但是我在这里如何获得其他的结果。我如何只输出不同名称的行与上述字段?
注意:如果这超出了SQL的范围,我可以用PHP手动执行它 - 但我试图查看是否可以在一个查询中完成,因此我不必将工作转移到PHP。
如果有人想迅速做出表,这里的转储:
CREATE DATABASE IF NOT EXISTS `testdb`;
USE `testdb`;
CREATE TABLE `tblPoints` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(45) NOT NULL,
`round` int(10) unsigned NOT NULL,
`points` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1;
INSERT INTO `tblPoints` VALUES (1,'Dummy',1,30),(2,'Yes',1,45),(3,'Hi',1,20),(4,'Dummy',2,45),(5,'Yes',2,15),(6,'Hi',2,65),(7,'Newbie',2,10),(8,'Dummy',3,50),(9,'Yes',3,20),(10,'Hi',3,45);
完美的作品。谢谢! – Water 2014-12-13 17:41:31