2012-06-04 46 views
1

我有四個表是這樣的:MySQL的加入四個表,並得到某種SUM的結果

mysql> describe courses; 
+-----------------+-------------+------+-----+---------+----------------+ 
| Field   | Type  | Null | Key | Default | Extra   | 
+-----------------+-------------+------+-----+---------+----------------+ 
| course_id  | int(11)  | NO | PRI | NULL | auto_increment | 
| course_name  | varchar(75) | YES |  | NULL |    | 
| course_price_id | int(11)  | YES | MUL | NULL |    | 
+-----------------+-------------+------+-----+---------+----------------+ 

mysql> describe pricegroups; 
+-------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+-------------+--------------+------+-----+---------+----------------+ 
| price_id | int(11)  | NO | PRI | NULL | auto_increment | 
| price_name | varchar(255) | YES |  | NULL |    | 
| price_value | int(11)  | YES |  | NULL |    | 
+-------------+--------------+------+-----+---------+----------------+ 

mysql> describe courseplans; 
+------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+------------+--------------+------+-----+---------+----------------+ 
| plan_id | int(11)  | NO | PRI | NULL | auto_increment | 
| plan_name | varchar(255) | YES |  | NULL |    | 
| plan_time | int(11)  | YES |  | NULL |    | 
+------------+--------------+------+-----+---------+----------------+ 

mysql> describe course_to_plan; 
+-----------+---------+------+-----+---------+-------+ 
| Field  | Type | Null | Key | Default | Extra | 
+-----------+---------+------+-----+---------+-------+ 
| course_id | int(11) | NO | PRI | NULL |  | 
| plan_id | int(11) | NO | PRI | NULL |  | 
+-----------+---------+------+-----+---------+-------+ 

讓我試着解釋我有什麼,我想該怎麼辦...

所有我的課程(course_id)有不同的步驟(plan_id),其值爲1天或更多天(plan_time)。

課程有一個或多個步驟(course_to_plan

課程連接到價格組(price_id)。

我想查詢我的MySQL數據庫,並得到一個輸出關:
course_name,該plan_id的它,以及基於price_id與在plan_time值在一起的價值得到的結果誰看起來像這樣的:

+------------+--------------+------------+---------+ 
| course_name| pricegroup | plan_time | RESULT | 
+------------+--------------+------------+---------+ 
| Math  | Expensive | 7   | 3500 | 
+------------+--------------+------------+---------+ 

我希望你明白我...
它甚至有可能與我或者我應該「重建-和重做,正確」的東西結構?

+0

如何計算RESULT?它是'price_value * plan_time'嗎? – eggyal

+0

result = price_value * plan_time? – Sebas

+0

例如:課程X有三個計劃,其值爲'10','5','15',並且將使用該課程所連接的'price_id'進行計算。這可以例如具有值「500」。我的課程X的結果將是'30 * 500 = 15000' – David

回答

1
SELECT c.course_name, p.price_name, SUM(cp.plan_time), SUM(cp.plan_time * p.price_value) 
FROM courses c 
    INNER JOIN pricegroups p  ON p.price_id = c.course_price_id 
    INNER JOIN course_to_plan cpl ON cpl.course_id = c.course_id 
    INNER JOIN courseplans cp  ON cp.plan_id = cpl.plan_id 
GROUP BY c.course_name, p.price_name 

請注意,在我看來,你的實現可能是錯誤的。你想要這些數據的方式讓我覺得你可以爲一個有價格的計劃感到高興,所以你不會將同樣的價格用於「昂貴」的計劃和另一種「便宜」的計劃,這就是你現在正在做。但我不知道,這是直觀的:-)

感謝您接受答案,問候。

+0

謝謝!工作像一個魅力 – David

+0

yaaah幸運的^^然而,我會在一秒內添加評論... – Sebas

1

讓我看看,如果我理解你的需求:

SELECT c.course_name, pg.price_name, 
     COUNT(cp.plan_time), SUM(pg.price_value * cp.plan_time) AS result 
FROM courses c 
INNER JOIN pricegroups pg ON c.course_price_id = pg.price_id 
INNER JOIN course_to_plan ctp ON c.course_id = ctp.course_id 
INNER JOIN courseplans cp ON ctp.plan_id = cp.plan_id 
GROUP BY c.couse_name, pg.price_name 
+0

@David:我的查詢出了什麼問題? – Marco

+0

我認爲這是計數 – Sebas

+0

@Sebas:嗯,也許你是對的,謝謝:) – Marco