2017-04-15 94 views
0

我有以下結構的兩個表:Mysql的連接兩個表和,其中和基團通過

sales 
|date  |time  | name | total | 
|2017-04-01 |10:23:59 | aaa | 100 | 
|2017-04-01 |10:23:59 | aaa | 150 | 
|2017-04-01 |11:33:30 | bbb | 200 | 
|2017-04-01 |11:33:30 | bbb | 120 | 
|2017-04-02 |10:50:59 | aaa | 70 | 
|2017-04-02 |10:30:59 | bbb | 35 | 

payment 
|date  |time  | name | amount | 
|2017-04-01 |10:23:59 | aaa | 300 | 
|2017-04-01 |11:33:30 | bbb | 400 | 
|2017-04-02 |10:50:59 | aaa | 425 | 
|2017-04-02 |10:30:59 | bbb | 600 | 

條款

  1. sales.time = payment.time
  2. 其中date = 2017 -04-01
  3. sum(sales.total)and sum(payment.amount)
  4. 按時間組

我想這個結果

|date  |time  | name | sum(total) | sum(amount)| 
|2017-04-01 |13:23:59 | aaa | 250  | 300  | 
|2017-04-01 |12:33:30 | bbb | 320  | 400  | 

表結構

CREATE TABLE `payment` (`id` int(5) NOT NULL,`date` date NOT NULL,`time` time NOT NULL,`name` varchar(10) NOT NULL,`amount` varchar(10) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT; 
INSERT INTO `payment` (`id`, `date`, `time`, `name`, `amount`) VALUES(3, '2017-04-01', '10:23:59', 'aaa', '300'),(4, '2017-04-01', '11:33:30', 'bbb', '400'),(5, '2017-04-02', '10:50:59', 'aaa', '425'),(6, '2017-04-02', '10:30:59', 'bbb', '600'); 
CREATE TABLE `sales` (`id` int(5) NOT NULL,`date` date NOT NULL,`time` time NOT NULL,`name` varchar(10) NOT NULL,`total` int(10) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1; 
INSERT INTO `sales` (`id`, `date`, `time`, `name`, `total`) VALUES(1, '2017-04-01', '10:23:59', 'aaa', 100),(2, '2017-04-01', '10:23:59', 'aaa', 150),(3, '2017-04-01', '11:33:30', 'bbb', 200),(4, '2017-04-01', '11:33:30', 'bbb', 120),(5, '2017-04-02', '10:50:59', 'aaa', 70),(6, '2017-04-02', '10:50:59', 'bbb', 35); 
ALTER TABLE `payment` ADD PRIMARY KEY (`id`); 
ALTER TABLE `sales` ADD PRIMARY KEY (`id`); 
ALTER TABLE `payment` MODIFY `id` int(5) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7; 
ALTER TABLE `sales` MODIFY `id` int(5) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7; 

查詢

SELECT sales.time,sales.name, 
SUM(sales.total),SUM(payment.amount) 
FROM sales,payment 
WHERE sales.time=payment.time 
and sales.date like '2017-04-01%' 
GROUP BY sales.time 
ORDER BY sales.time; 

結果是

10:23:59 aaa 250 600 
11:33:30 bbb 320 800 
+0

你應該能夠把這些條件一起進入查詢。 –

+0

編輯您的問題並顯示您嘗試過的查詢,並解釋結果不正確的原因。 –

+0

每個日期,時間和名稱總是隻有一次付款嗎? –

回答

1

您正在將支付金額與銷售記錄數相乘,因爲您在彙總金額前將所有支付記錄與所有銷售記錄一起加入。

先聚合,​​然後才加入。

在情況下,有可能永遠只能是每日期,時間和名稱進行付款記錄:

select p.name, p.time, p.name, s.sales_total, p.amount 
from payments p 
join 
(
    select date, time, name, sum(total) as total 
    from sales 
    group by date, time, name 
) s 
on s.date = p.date and s.time = p.time and s.name = p.name 
where p.date = date '2017-04-01'; 

否則:

select p.name, p.time, p.name, s.total, p.amount 
(
    select date, time, name, sum(amount) as amount 
    from payments 
    group by date, time, name 
) p 
join 
(
    select date, time, name, sum(total) as total 
    from sales 
    group by date, time, name 
) s 
on s.date = p.date and s.time = p.time and s.name = p.name 
where p.date = date '2017-04-01'; 
+0

只是工作很好結果ok謝謝:-)更改表名 –

+0

我有錯誤「否則:」這個sql –

+0

組由第3行的d' –