簡體   English   中英

嘗試連接兩個表時Sum不正確

[英]Sum is incorrect when trying to join two tables

在使用連接時,我正在努力從qty列中獲取正確的總和。 當我嘗試從paymentType表中獲取timestamp並將這些timestamporderspaymentType表中的rowid paymentType ,然后將timestamp分組為天(day(from_unixtime(paymentType.timestamp)))

我希望使用paymentType表中的timestamp來按小時計算qty的總和,唯一的鏈接是rowid (這是codeigniter的cart模塊的rowid )。 邏輯問題(至少對我來說)是它在orders表中存在的行orders (因為這是每個產品)而不是paymentType表(這只是為了跟蹤是否使用了借方或現金)。 當我將這些表連接在一起時,每個小時的總和乘以orders.rowid <--> paymentType.rowid每個orders.rowid <--> paymentType.rowid

如果解釋不好,我很抱歉,但我希望我能在這件事上得到幫助,這是可以理解的。

我至少有10次查詢,但似乎沒有任何查詢按我想要的方式工作。

以下是我的orders

+---------+----+-------+-----+----------+------------------+----------------------------------+
| orderID | id | price | qty | subtotal |       name       |              rowid               |
+---------+----+-------+-----+----------+------------------+----------------------------------+
|       3 | 49 |    35 |   1 |       35 | Red Bull Stor    | f457c545a9ded88f18ecee47145a72c0 |
|       4 | 24 |    35 |   1 |       35 | Monster Energy   | 1ff1de774005f8da13f42943881c655f |
|       5 | 49 |    35 |   1 |       35 | Red Bull Stor    | f457c545a9ded88f18ecee47145a72c0 |
|       6 | 19 |    20 |   1 |       20 | Sprite 0.5L      | 1f0e3dad99908345f7439f8ffabdffc4 |
|       7 |  1 |    25 |   1 |       25 | Pringles         | c4ca4238a0b923820dcc509a6f75849b |
|       8 | 43 |    20 |   1 |       20 | Lån av stekovn   | 17e62166fc8586dfa4d1bc0e1742c08b |
|       9 | 46 |    35 |   1 |       35 | Burn             | d9d4f495e875a2e075a1a4a6e1b9770f |
|      10 | 49 |    35 |   3 |      105 | Red Bull Stor    | f457c545a9ded88f18ecee47145a72c0 |
|      11 | 49 |    35 |   1 |       35 | Red Bull Stor    | f457c545a9ded88f18ecee47145a72c0 |
|      12 | 29 |    25 |   1 |       25 | Potetskruer      | 6ea9ab1baa0efb9e19094440c317e21b |
|      13 | 16 |    20 |   1 |       20 | Coca-Cola 0.5L   | c74d97b01eae257e44aa9d5bade97baf |
|      14 | 46 |    35 |   1 |       35 | Burn             | d9d4f495e875a2e075a1a4a6e1b9770f |
|      15 |  1 |    25 |   1 |       25 | Pringles         | c4ca4238a0b923820dcc509a6f75849b |
|      16 | 18 |    20 |   1 |       20 | Eventyrbrus 0.5L | 6f4922f45568161a8cdf4ad2299f6d23 |
|      17 | 16 |    20 |   1 |       20 | Coca-Cola 0.5L   | c74d97b01eae257e44aa9d5bade97baf |
|      18 | 15 |    30 |   1 |       30 | Coca-Cola 1.5L   | 9bf31c7ff062936a96d3c8bd1f8f2ff3 |
|      19 | 19 |    20 |   1 |       20 | Sprite 0.5L      | 1f0e3dad99908345f7439f8ffabdffc4 |
|      20 | 50 |    20 |   1 |       20 | Stratos bar      | c0c7c76d30bd3dcaefc96f40275bdc0a |
+---------+----+-------+-----+----------+------------------+----------------------------------+

這是paymentType

+-----------+-------------+------------+----------------------------------+
| paymentID | paymentType | timestamp  |              rowid               |
+-----------+-------------+------------+----------------------------------+
|         3 | Kort        | 1424447799 | f457c545a9ded88f18ecee47145a72c0 |
|         4 | Kort        | 1424448791 | 1ff1de774005f8da13f42943881c655f |
|         5 | Kort        | 1424452822 | f457c545a9ded88f18ecee47145a72c0 |
|         6 | Kort        | 1424454483 | c4ca4238a0b923820dcc509a6f75849b |
|         7 | Kort        | 1424454665 | d9d4f495e875a2e075a1a4a6e1b9770f |
|         8 | Kontant     | 1424454799 | f457c545a9ded88f18ecee47145a72c0 |
|         9 | Kontant     | 1424454825 | f457c545a9ded88f18ecee47145a72c0 |
|        10 | Kort        | 1424454870 | 6ea9ab1baa0efb9e19094440c317e21b |
|        11 | Kontant     | 1424455510 | d9d4f495e875a2e075a1a4a6e1b9770f |
|        12 | Kort        | 1424455847 | c4ca4238a0b923820dcc509a6f75849b |
|        13 | Kontant     | 1424456025 | 6f4922f45568161a8cdf4ad2299f6d23 |
|        14 | Kontant     | 1424456099 | c74d97b01eae257e44aa9d5bade97baf |
|        15 | Kontant     | 1424456148 | 9bf31c7ff062936a96d3c8bd1f8f2ff3 |
|        16 | Kontant     | 1424456242 | c0c7c76d30bd3dcaefc96f40275bdc0a |
|        17 | Kort        | 1424456266 | c74d97b01eae257e44aa9d5bade97baf |
|        18 | Kort        | 1424456445 | c0c7c76d30bd3dcaefc96f40275bdc0a |
|        19 | Kort        | 1424456964 | 70efdf2ec9b086079795c442636b55fb |
|        20 | Kort        | 1424457701 | 1ff1de774005f8da13f42943881c655f |
+-----------+-------------+------------+----------------------------------+

編輯: SQL查詢我到目前為止嘗試過,存在更多,但這些是最新的。 我認為這些是最“正確的”。

select orders.rowid, concat(convert(paymentType.timestamp,CHAR(11))) timestamp, orders.qty, orders.name
from orders
join paymentType
on orders.rowid = paymentType.rowid
order by paymentType.timestamp;

select orders.rowid, hour(from_unixtime(concat(convert(paymentType.timestamp,CHAR(11))))), orders.qty, orders.name
from orders
join paymentType
on orders.rowid = paymentType.rowid
#where orders.name = '".stripslashes($name)."'
order by paymentType.timestamp
;
select orders.qty, orders.name, orders.rowid, paymentType.rowid, paymentType.timestamp
from orders, paymentType
where orders.rowid = paymentType.rowid;

select qty, name, hour(from_unixtime(timestamp)) hour, day(from_unixtime(timestamp)) day
from orders_w_time
where name = 'Red Bull Stor'
;

select sum(qty) from orders
inner join (select distinct rowid from paymentType) pt
on orders.rowid = pt.rowid
where orders.name = 'Pølse';

select sum(orders.qty) totalqty, orders.name, pt.timestamp timestamp from orders ord
inner join (select timestamp from paymentType where paymentType.rowid = ord.rowid) pt
on orders.rowid = pt.rowid
where orders.name = 'Red Bull Stor';
select * from
(
select rowid, timestamp from paymentType
group by hour(from_unixtime(timestamp))
) pt
left join
(
select sum(qty), name, rowid from orders
) ord
on ord.rowid = pt.rowid
;
Select
  paymentType.rowid,
  orders.name,
  orders.qty,
  paymentType.timestamp
From
  orders,
  paymentType
Group By
  day(from_unixtime(paymentType.timestamp));

select sum(orders.qty) Total
from orders
left join
(
select rowid,timestamp
from paymentType
) as paymet on orders.rowid = paymet.rowid
group by day(from_unixtime(paymet.timestamp))
;

select paymentType.rowid, ord.qty, timestamp
from paymentType
left join
(
select orders.rowid, qty
from orders
) as ord on ord.rowid = paymentType.rowid
;

預期的結果是將按小時分組的每一天的'Red Bull Stor'(即。)的qty列相加。

你可以嘗試這樣的事情:

select o.name
     , pt.rowid
     , sum(o.qty)
     , hour(from_unixtime(pt.timestamp))
     , day(from_unixtime(pt.timestamp))
from orders o
join paymentType pt using(rowid)
where o.name = 'Red Bull Stor'
group by o.name
       , o.rowid
       , hour(from_unixtime(pt.timestamp))
       , day(from_unixtime(pt.timestamp));

SQLFiddle

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM