MySQL se alăture celor patru mese și obține un fel de rezultat SUM

Am patru mese ca aceasta:

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

Let me try to explain what I have and what I would like to do...

All my courses (course_id) has different steps (plan_id) wich has a value of 1 or more days (plan_time).

A course has one or more steps (course_to_plan)

A course is connected to a pricegroup (price_id).

I would like to query my MySQL database and get an output off:
The course_name, the plan_id's it has, and based on the value of price_id together with the value in the plan_time get a result who looks something like this:

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

I hope you understand me...
Is it even possible with the structure I have or should I "rebuild-and-redo-correct" something?

0
De exemplu, cursul X are trei planuri care au valorile 10 , 5 , 15 și se calculează cu < price_id a cărui curs este conectat. Aceasta poate avea, de exemplu, valoarea 500 . Rezultatul meu pentru cursul X ar fi apoi 30 * 500 = 15000
adăugat autor David, sursa
rezultat = valoare_valoare * plan_time?
adăugat autor Sebas, sursa
Cum se calculează RESULT ? Este price_value * plan_time ?
adăugat autor eggyal, sursa

2 răspunsuri

Let me see if I understand what you need:

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
adăugat
Sunteti amandoi minunati :) Multumesc mult!
adăugat autor David, sursa
@David: Ce e în neregulă cu interogarea mea?
adăugat autor Marco, sursa
@Sebas: uhm, poate ai dreptate, mulțumesc :)
adăugat autor Marco, sursa
Cred că este contele
adăugat autor Sebas, sursa
sincer, de aceea am spus "împușcat norocos", a fost doar noroc .. Ar putea fi COUNT, de asemenea, fără detalii suplimentare :-)
adăugat autor Sebas, sursa
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

Rețineți că mi se pare că implementarea dvs. ar putea fi eronată. Modul în care doriți datele mă face să cred că ați putea fi mai fericiți cu un plan care are un preț, deci nu aplicați același preț pentru un plan care este "scump" ȘI un alt plan care este "ieftin", ceea ce este pe care o faceți în acest moment. Dar nu știu cu adevărat, este intuitiv :-)

Vă mulțumim pentru acceptarea răspunsului, respect.

0
adăugat
Mulțumesc! Munca e ca un farmec
adăugat autor David, sursa
yaaah norocos împușcat ^^ cu toate acestea, voi adăuga un comentariu într-o sec ...
adăugat autor Sebas, sursa
MySQL - comunitatea Română
MySQL - comunitatea Română
19 participanți

Comunitatea română a programatorilor MySQL.