我遇到了MySQL查询的困难。
数据库如下所示:
Name Unit Int
---------------------
A1 Kilo 20
A1 Price 5
A2 Kilo 15
A2 Price 3
这是我正在尝试做的事情:
| Name | Unit | int |
| A1 | Kilo | 20 |
| A1 | Price | 5 |
| A1 | K/P | 4 |
| A2 | Kilo | 15 |
| A2 | Price | 3 |
| A2 | K/P | 5 |
如您所见,我想为每个A1和A2插入一个新行,结果为Kilo除以Price。
这甚至可以吗? 如果是这样,有人能指出我正确的方向吗?我在这里很迷茫,最近几天试图扫过网络,结果很好。我尝试过的想法比我想要的更多。
答案 0 :(得分:3)
您可以在SELECT中执行类似的操作,使用最新的可用数据即时计算(因此,如果Price / Kilo要更改,则可以防止存储稍后可能过时的内容):
SELECT `kilo`.`name`, (`kilo`.`int` / `price`.`int`) AS 'K/P' FROM `stuff` AS `kilo`
LEFT JOIN `stuff` AS `price` ON (`kilo`.`name` = `price`.`name`)
WHERE `kilo`.`unit`='Kilo' AND `price`.`unit`='Price';
这将返回:
+------------+
| name | K/P |
|------------|
| A1 | 4 |
| A2 | 5 |
+------------+
如果您真的想将其插入数据库,可以INSERT ... SELECT以上内容。像这样:
INSERT INTO `stuff` (`name`, `unit`, `int`)
SELECT `kilo`.`name`, 'K/P', (`kilo`.`int` / `price`.`int`) FROM `stuff` AS `kilo`
LEFT JOIN `stuff` AS `price` ON (`kilo`.`name` = `price`.`name`)
WHERE `kilo`.`unit`='Kilo' AND `price`.`unit`='Price';
请参阅完整的SQL Fiddle示例here。
答案 1 :(得分:3)
您可以使用
获得所有结果SELECT * FROM (
(SELECT * FROM your_table_name)
UNION
(SELECT r1.Name as Name, 'K/P', r1.Int/r2.Int
FROM your_table_name r1, your_table_name r2
WHERE r1.Name=r2.Name AND r1.Unit='Kilo' AND r2.Unit='Price'
)
) AS derived_table
ORDER BY Name, FIELD(Unit,'Kilo','Price','K/P');