mysql查询嵌套查询双排序

mysql查询嵌套查询双排序,mysql,nested-queries,Mysql,Nested Queries,我使用这样的简单sql查询:$sql=“选择名称、日期”格式(日期添加、%d-%m-%Y”)作为我的日期,从表中付款“,我得到3列表格,例如: name mydate payment luke 10-12-2015 50 tom 13-12-2015 60 john 13-12-2015 40 tom 14-12-2015 30 eva 15-12-2015 40 john 16-12-2015 70 tom 16-12-2015 20 可以这样编

我使用这样的简单sql查询:
$sql=“选择名称、日期”格式(日期添加、%d-%m-%Y”)作为我的日期,从表中付款“
,我得到3列表格,例如:

name  mydate     payment
luke  10-12-2015  50
tom   13-12-2015  60
john  13-12-2015  40
tom   14-12-2015  30
eva   15-12-2015  40
john  16-12-2015  70
tom   16-12-2015  20
可以这样编写sql查询(我想可能是嵌套的)吗?首先,我会按名称获取每个组的付款总额,然后按总和对其进行排序,但最终的表是这样的:

name  mydate     payment
john  13-12-2015  40
john  16-12-2015  70
tom   13-12-2015  60
tom   14-12-2015  30
tom   16-12-2015  20
luke  10-12-2015  50
eva   15-12-2015  40
约翰是第一个,因为他的付款总额是110,和汤姆的一样,但他按字母顺序排在第一位,然后是卢克和伊娃。查询的外观如何(如果可以在一个sql查询中执行所有步骤)

我们需要根据您的要求进行汇总和分组。

以下是一种方法:

MySQL 5.6架构设置

CREATE TABLE atable
    (`name` varchar(4), `mydate` datetime, `payment` int)
;

INSERT INTO atable
    (`name`, `mydate`, `payment`)
VALUES
    ('luke', '2015-12-10 00:00:00', 50),
    ('tom', '2015-12-13 00:00:00', 60),
    ('john', '2015-12-13 00:00:00', 40),
    ('tom', '2015-12-14 00:00:00', 30),
    ('eva', '2015-12-15 00:00:00', 40),
    ('john', '2015-12-16 00:00:00', 70),
    ('tom', '2015-12-16 00:00:00', 20)
;
select
      atable.name
    , atable.mydate
    , atable.payment
    , g.sum_payment
from atable
inner join (
            select name, sum(payment) as sum_payment
            from atable
            group by name
           ) g on atable.name = g.name
order by
      g.sum_payment DESC
    , atable.name
    , atable.mydate
    , atable.payment
| name |                     mydate | payment | sum_payment |
|------|----------------------------|---------|-------------|
| john | December, 13 2015 00:00:00 |      40 |         110 |
| john | December, 16 2015 00:00:00 |      70 |         110 |
|  tom | December, 13 2015 00:00:00 |      60 |         110 |
|  tom | December, 14 2015 00:00:00 |      30 |         110 |
|  tom | December, 16 2015 00:00:00 |      20 |         110 |
| luke | December, 10 2015 00:00:00 |      50 |          50 |
|  eva | December, 15 2015 00:00:00 |      40 |          40 |
查询1

CREATE TABLE atable
    (`name` varchar(4), `mydate` datetime, `payment` int)
;

INSERT INTO atable
    (`name`, `mydate`, `payment`)
VALUES
    ('luke', '2015-12-10 00:00:00', 50),
    ('tom', '2015-12-13 00:00:00', 60),
    ('john', '2015-12-13 00:00:00', 40),
    ('tom', '2015-12-14 00:00:00', 30),
    ('eva', '2015-12-15 00:00:00', 40),
    ('john', '2015-12-16 00:00:00', 70),
    ('tom', '2015-12-16 00:00:00', 20)
;
select
      atable.name
    , atable.mydate
    , atable.payment
    , g.sum_payment
from atable
inner join (
            select name, sum(payment) as sum_payment
            from atable
            group by name
           ) g on atable.name = g.name
order by
      g.sum_payment DESC
    , atable.name
    , atable.mydate
    , atable.payment
| name |                     mydate | payment | sum_payment |
|------|----------------------------|---------|-------------|
| john | December, 13 2015 00:00:00 |      40 |         110 |
| john | December, 16 2015 00:00:00 |      70 |         110 |
|  tom | December, 13 2015 00:00:00 |      60 |         110 |
|  tom | December, 14 2015 00:00:00 |      30 |         110 |
|  tom | December, 16 2015 00:00:00 |      20 |         110 |
| luke | December, 10 2015 00:00:00 |      50 |          50 |
|  eva | December, 15 2015 00:00:00 |      40 |          40 |

CREATE TABLE atable
    (`name` varchar(4), `mydate` datetime, `payment` int)
;

INSERT INTO atable
    (`name`, `mydate`, `payment`)
VALUES
    ('luke', '2015-12-10 00:00:00', 50),
    ('tom', '2015-12-13 00:00:00', 60),
    ('john', '2015-12-13 00:00:00', 40),
    ('tom', '2015-12-14 00:00:00', 30),
    ('eva', '2015-12-15 00:00:00', 40),
    ('john', '2015-12-16 00:00:00', 70),
    ('tom', '2015-12-16 00:00:00', 20)
;
select
      atable.name
    , atable.mydate
    , atable.payment
    , g.sum_payment
from atable
inner join (
            select name, sum(payment) as sum_payment
            from atable
            group by name
           ) g on atable.name = g.name
order by
      g.sum_payment DESC
    , atable.name
    , atable.mydate
    , atable.payment
| name |                     mydate | payment | sum_payment |
|------|----------------------------|---------|-------------|
| john | December, 13 2015 00:00:00 |      40 |         110 |
| john | December, 16 2015 00:00:00 |      70 |         110 |
|  tom | December, 13 2015 00:00:00 |      60 |         110 |
|  tom | December, 14 2015 00:00:00 |      30 |         110 |
|  tom | December, 16 2015 00:00:00 |      20 |         110 |
| luke | December, 10 2015 00:00:00 |      50 |          50 |
|  eva | December, 15 2015 00:00:00 |      40 |          40 |