【发布时间】:2014-07-23 16:08:56
【问题描述】:
我有两张桌子
Products
id, name, last_updated
1, Computer table, 2014-07-20 09:00:00
2, Fruits basket, 2014-07-21 09:00:00
3, Hard Disk, 2014-07-22 09:00:00
Products_prices
id, product_id, min_price, max_price, description
1, 1, 10.00, 20.00, glass top
2, 1, 40.00, 80.00, hard wood
3, 1, 5.00, 10.00, pvc
4, 2, 15.00, 30.00, Mangoes only
5, 3, 30.00, 60.00, 1 TB
6, 3, 45.00, 90.00, 2 TB
7, 3, 20.00, 40.00, 500 GB
我需要检索如下信息
product.id, product.name, product_prices.min_price, product_prices.max_price, price_diff_percentage ( calculated as round((max_price-min_price)/max_price*100) )
如果我进行左连接,例如
SELECT *, round((max_price-min_price)/max_price*100) price_diff_pct
FROM products p LEFT JOIN Product_prices pp on pp.product_id = p.id
然后我得到包含所有产品价格行的产品列表,例如
1, computer table, 10.00, 20.00, 50, glass top
1, computer table, 40.00, 80.00, 50, hard wood
1, computer table, 5.00, 10.00, 50, pvc
2, fruits basket, 15.00, 30.00, mangoes only
3, hard disk, 30.00, 60.00, 50 1 TB
3, hard disk, 45.00, 90.00, 50 2 TB
3, hard disk, 20.00, 40.00, 50 500 GB
我希望将其更改为返回一个具有最低最低价格和 price_diff_pct 的产品行,例如而不是上面的返回集,它返回下面的
1, computer table, 5.00, 10.00, 50, pvc
2, fruits basket, 15.00, 30.00, mangoes only
3, hard disk, 20.00, 40.00, 50 500 GB
我需要在最后更新日期之前订购。
我该怎么做?
更新:
create table products (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(300) NOT NULL,
`last_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
);
INSERT INTO products (1, 'Computer table', '2014-07-20 09:00:00');
INSERT INTO products (2, 'Fruits basket', '2014-07-21 09:00:00');
INSERT INTO products (3, 'Hard Disk', '2014-07-22 09:00:00');
CREATE TABLE IF NOT EXISTS `product_prices` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`product_id` int(10) unsigned NOT NULL,
`min_price` float(10,2) NOT NULL,
`max_price` float(10,2) NOT NULL,
`description` varchar(300) NOT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO product_prices (1, 1, '10.00', '20.00', 'glass top');
INSERT INTO product_prices (2, 1, '40.00', '80.00', 'hard wood');
INSERT INTO product_prices (3, 1, '5.00', '10.00', 'pvc');
INSERT INTO product_prices (4, 2, '15.00', '30.00', 'Mangoes only');
INSERT INTO product_prices (5, 3, '30.00', '60.00', '1 TB');
INSERT INTO product_prices (6, 3, '45.00', '90.00', '2 TB');
INSERT INTO product_prices (7, 3, '20.00', '40.00', '500 GB');
【问题讨论】:
-
如果您愿意,请考虑遵循以下简单的两步操作: 1. 如果您还没有这样做(您还没有这样做),请提供适当的 DDL(和/或 sqlfiddle)这样我们就可以更容易地复制问题。 2. 如果您还没有这样做(您已经这样做了),请提供与步骤 1 中提供的信息相对应的所需结果集。
-
我在上面提供了表格结构和所需结果集等信息。请看上面。抱歉,如果不清楚。让我试试 SQLFiddle