繁体   English   中英

选择2种类型的记录

[英]Select records with 2 type of sort

我在mySQL中有2个表,包含以下数据:

表格1:

id     |   title
-------+-----------
1      |  Test 1
2      |  Test 2
3      |  Test 3
4      |  Test 4

表2:

id     |  table1_id   |   price
-------+--------------+----------
1      | 1            | 15000
2      | 1            | 2000
3      | 1            | 32600
4      | 2            | 1000
5      | 3            | 4000
6      | 4            | 5500
7      | 2            | 3000

现在,我想按id排序从Table 1选择所有记录,并从Table 2选择最大price ,所以我编写了此查询:

SELECT a.*, b.price
FROM table1 AS a, table2 AS b
WHERE a.id = b.table1_id
GROUP BY a.id
ORDER BY a.id ASC, b.price DESC

但是结果是Table 2的第一个价格。

尝试这个:

SELECT DISTINCT a.*, MAX(b.price)
FROM table1 AS a, table2 AS b
WHERE a.id = b.table1_id
GROUP BY a.id
ORDER BY a.id ASC

您可以使用分组依据或子选择来完成(更好的解决方案,将选择不包含价格的table1记录)

SELECT
    a.*,
    b.price
FROM table1 AS a
LEFT OUTER JOIN
(
    SELECT  
        table1_id,
        MAX(price) AS price
    FROM table2
    GROUP BY table1_id
) AS b
    ON b.table1_id = a.id
ORDER BY a.id ASC, b.price DESC

您需要的是第二个表上的分组最大。

SELECT a.*, b.price
FROM table1 a
JOIN table2 b ON a.id = b.table1_id
LEFT JOIN table2 b2 ON b.table1_id=b2.table1_id AND b.price<b2.price
WHERE b2.id IS NULL
ORDER BY a.id ASC;

该查询的优点是您可以从第二个表中选择所有数据,而不仅仅是最高价格。

尝试

SELECT t1 . * , MAX( t2.price ) 
FROM table1 t1, table2 t2
WHERE t1.id = t2.table1_id
GROUP BY t1.id
ORDER BY t1.id ASC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM