sql有多个条件

时间:2018-08-09 07:28:25

标签: mysql

我有两个表(例如帐单和已售产品)

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 |
+--------+-----------------+

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

2 个答案:

答案 0 :(得分:1)

尝试以下联接

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;

答案 1 :(得分:0)

您可以尝试以下查询:(我没有测试过)

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;