mysql查询嵌套查询双排序
我使用这样的简单sql查询: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=“选择名称、日期”格式(日期添加、%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 |