sql多条件连接

kx5bkwkv  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(365)

我有两张table,(比如比尔和Solr德产品)

select * from bill;
+------+------------+------------+
| id   | solddate   | customerId |
+------+------------+------------+
|   11 | 2018-07-23 |          1 |
|   12 | 2018-07-21 |          1 |
|   13 | 2018-08-02 |          2 |
|   14 | 2018-08-08 |          2 |
|   15 | 2018-08-08 |          1 |
|   16 | 2018-08-08 |          1 |
+------+------------+------------+

 select * from soldproduct;
+--------+-------------+----------+-------+------------+
| billid | productname | quantity | price | totalprice |
+--------+-------------+----------+-------+------------+
|     11 | book        |        2 |   100 |        200 |
|     11 | pen         |       10 |    10 |        100 |
|     11 | pencil      |        5 |     2 |         10 |
|     12 | pencil      |        5 |     2 |         10 |
|     13 | pen         |       10 |    10 |        100 |
|     13 | book        |        2 |   100 |        200 |
|     14 | pen         |        1 |    10 |         10 |
|     14 | bottle      |        1 |    75 |         75 |
|     15 | phone       |        1 |  5000 |       5000 |
|     16 | lock        |       15 |    50 |        750 |
+--------+-------------+----------+-------+------------+

我需要用totalprice找到最高的账单id。我试过用

select billid,sum(totalprice) 
from soldproduct 
where billid in (select id from bill where solddate >= date_sub(curdate(),interval 1 month)) 
group by billid 
order by totalprice desc;

我的输出是

+--------+-----------------+
| billid | sum(totalprice) |
+--------+-----------------+
|     15 |            5000 |
|     16 |             750 |
|     11 |             310 |
|     13 |             300 |
|     12 |              10 |
|     14 |              85 |
+--------+-----------------+

如何通过使用联接(不使用子查询)的单个查询获得相同的输出?

z18hc3ub

z18hc3ub1#

你能试试下面的查询吗:(我没有测试过)

SELECT billid, SUM(totalprice) 
FROM soldproduct SP 
JOIN bill B ON (B.id = SP.billid) 
WHERE B.solddate BETWEEN (CURRENT_DATE() - INTERVAL 1 MONTH) AND CURRENT_DATE() 
GROUP BY SP.billid 
ORDER BY SP.totalprice DESC;
n8ghc7c1

n8ghc7c12#

尝试以下连接

select billid,sum(totalprice) 
from soldproduct 
join bill on soldproduct.billid = bill.id and solddate >= date_sub(curdate(),interval 1 
month)
group by billid 
order by totalprice desc;

相关问题