2

我有一个lottery_winners用以下有用的列调用的表:

+----+------+------+--------+---------+
| 编号 | 夹层 | 出价 | 金额 | 数字 |
+----+------+------+--------+---------+

id是表的唯一主 ID。plidpast_lotteries表(即我可以通过这种方式获取过去某个特定彩票中的所有彩票中奖者。zbid是会员/用户(中奖者)的id。amount是他们在彩票中中奖的金额总和,最后numbers是带有VARCHAR彩票号码的 CSV 字段。

这是表中可能包含哪些行的示例:

+----+------+------+--------+---------+
| 编号 | 夹层 | 出价 | 金额 | 数字 |
+----+------+------+--------+---------+
| 1 | 1 | 2 | 1 | 1,2,3 |
+----+------+------+--------+---------+
| 2 | 1 | 4 | 5 | 4,5,6 |
+----+------+------+--------+---------+
| 3 | 1 | 3 | 7 | 3,4,5 |
+----+------+------+--------+---------+
| 4 | 1 | 2 | 3 | 7,8,9 |
+----+------+------+--------+---------+
| 5 | 2 | 2 | 8 | 8,9,10 |
+----+------+------+--------+---------+

现在,我想运行一个SELECT语句,它将带回所有行,但以非常特定的顺序。这些行应该这样分组zbid(在这种情况下,我添加了一个WHERE plid=1子句):

+----+------+------+--------+---------+
| 编号 | 夹层 | 出价 | 金额 | 数字 |
+----+------+------+--------+---------+
| 1 | 1 | 2 | 1 | 1,2,3 |
+----+------+------+--------+---------+
| 4 | 1 | 2 | 3 | 7,8,9 |
+----+------+------+--------+---------+
| 2 | 1 | 4 | 5 | 4,5,6 |
+----+------+------+--------+---------+
| 3 | 1 | 3 | 7 | 3,4,5 |
+----+------+------+--------+---------+

下一个标准是它们不仅应该按 分组zbid,而且在这个分组中它们应该按 排序amount DESC。这就是它现在的样子:

+----+------+------+--------+---------+
| 编号 | 夹层 | 出价 | 金额 | 数字 |
+----+------+------+--------+---------+
| 4 | 1 | 2 | 3 | 7,8,9 |
+----+------+------+--------+---------+
| 1 | 1 | 2 | 1 | 1,2,3 |
+----+------+------+--------+---------+
| 2 | 1 | 4 | 5 | 4,5,6 |
+----+------+------+--------+---------+
| 3 | 1 | 3 | 7 | 3,4,5 |
+----+------+------+--------+---------+

前两排互换了位置。

还有一个标准。如您所见,虽然它们按 分组,但它们zbid没有特定的顺序。我希望它按 分组zbid,但顺序应基于sum(amount)每个组。

下表zbid以无特定顺序显示了每个的总数(考虑到plid=1

+--------+-------------+
| 出价 | 总和(金额) |
+--------+-------------+
| 2 | 4 |
+--------+-------------+
| 3 | 7 |
+--------+-------------+
| 4 | 5 |
+--------+-------------+

因此,使用此信息,使用该SELECT语句的最终结果应如下(带有添加的sum(amount)列):

+----+------+------+--------+---------+----------- --+
| 编号 | 夹层 | 出价 | 金额 | 数字 | 总和(金额) |
+----+------+------+--------+---------+----------- --+
| 3 | 1 | 3 | 7 | 3,4,5 | 7 |
+----+------+------+--------+---------+----------- --+
| 2 | 1 | 4 | 5 | 4,5,6 | 5 |
+----+------+------+--------+---------+----------- --+
| 4 | 1 | 2 | 3 | 7,8,9 | 4 |
+----+------+------+--------+---------+----------- --+
| 1 | 1 | 2 | 1 | 1,2,3 | 4 |
+----+------+------+--------+---------+----------- --+

就是这样!现在我自己尝试了几件事,但我不确定如何获得完整的最终结果。我试过了:

SELECT id,plid,zbid,amount,numbers,sum(amount) FROM lottery_winners GROUP BY zbid ORDER BY sum(amount) DESC

现在这似乎符合最终标准,但它并没有给我表格的个人结果。

另请注意,由于这些结果将被分页,因此我需要将其添加LIMIT $start,$perpage到查询的末尾。

4

1 回答 1

2

试试这个:

SELECT  a.id, 
        a.plid, 
        a.zbid,
        a.amount, 
        a.numbers,
        c.totalAmount
FROM    lottery_winners a
            INNER JOIN  (
                            SELECT  b.zbid,
                                    SUM(b.amount) totalAmount
                            FROM    lottery_winner b
                            WHERE   b.plid = 1
                            GROUP BY b.zbid
                        ) c 
                ON a.zbid = c.zbid
WHERE   a.plid = 1
ORDER BY    c.totalAmount desc
于 2012-08-03T14:05:32.080 回答