2015-10-30 3 views
1

Я работаю над назначением базы данных. Я застрял в одном запросе: он должен показать общую сумму для оплаты комиксов (банд), заказанных во втором порядке (commande_id: 2), , что означает, что сначала мне нужно умножить цену каждой книги на количество (quantite в articles_commandes), который был заказан и суммировал цены. Моим примером является то, что один клиент заказал 3 разных комикса и один из них в 3 примерах. Мне удалось написать запрос, который суммирует все цены на 3 комикса, однако мне не удалось умножить цену комикса на его количество.SQL, показать общую стоимость заказа

Вот 3 таблицы, на которых им работать:

Article_commandes  | bande(comics) | commande 
===========    |============= |============= 
Commande_id FK   | bande_id PK |commande_id PK 
bande_id FK   | price PK  |commande_date 
quantité    |    |client_id FK 
         | .    |commande_valeur 
.      | .    | 
.      | .    | 
.      |    | 
==========    |======   |====== 

Первый является bandes (комиксы):

enter image description here

Во-вторых: articles_commandes (заказанные товары)

enter image description here

Это запрос, в котором Im суммированием цены 3 комиксов книги (bande_id), что, где заказанного в порядка 2 (command_id: 2)

SELECT SUM(`bande_prix`) FROM `bandes` where `bande_id` IN (select `bande_id` from `articles_commandes` where `commande_id` = 2); 

В результате получается:

enter image description here

Однако я нужен результат: 59, потому что второй комиксов был заказан 3 раза:

цены первых комиксов заказанной: 25 х 1 = 25

цена второй комикса скомандовал: 8 х 3 = 24 (здесь я получил проблему!)

цена третьего комикса скомандовал: 10 х 1 = 10

Как я должен написать запрос в чтобы получить общую стоимость всего заказа?

Буду очень признателен за любую помощь, совет и предложение!

-- phpMyAdmin SQL Dump 
-- version 4.1.14 
-- http://www.phpmyadmin.net 
-- 
-- Host: 127.0.0.1 
-- Generation Time: 30 Paź 2015, 19:38 
-- Server version: 5.6.17 
-- PHP Version: 5.5.12 

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; 
SET time_zone = "+00:00"; 


/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */; 
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */; 
/*!40101 SET @[email protected]@COLLATION_CONNECTION */; 
/*!40101 SET NAMES utf8 */; 

-- 
-- Database: `bd` 
-- 

-- -------------------------------------------------------- 

-- 
-- Struktura tabeli dla tabeli `articles_commandes` 
-- 

CREATE TABLE IF NOT EXISTS `articles_commandes` (
    `commande_id` int(6) NOT NULL, 
    `bande_id` int(6) NOT NULL, 
    `quantite` int(3) NOT NULL, 
    KEY `commande_id` (`commande_id`,`bande_id`), 
    KEY `bande_id` (`bande_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

-- 
-- Zrzut danych tabeli `articles_commandes` 
-- 

INSERT INTO `articles_commandes` (`commande_id`, `bande_id`, `quantite`) VALUES 
(1, 1, 1), 
(1, 2, 1), 
(2, 1, 1), 
(2, 3, 3), 
(2, 4, 1); 

-- -------------------------------------------------------- 

-- 
-- Struktura tabeli dla tabeli `auteur` 
-- 

CREATE TABLE IF NOT EXISTS `auteur` (
    `auteur_id` int(6) NOT NULL AUTO_INCREMENT, 
    `auteur_nom` varchar(30) NOT NULL, 
    `auteur_prenom` varchar(30) NOT NULL, 
    `auteur_dt_naissance` date NOT NULL, 
    PRIMARY KEY (`auteur_id`), 
    KEY `auteur_id` (`auteur_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ; 

-- 
-- Zrzut danych tabeli `auteur` 
-- 

INSERT INTO `auteur` (`auteur_id`, `auteur_nom`, `auteur_prenom`, `auteur_dt_naissance`) VALUES 
(1, 'Ikeda', 'Riyoko', '1947-12-18'), 
(2, 'Nakazawa', 'Keiji', '1939-03-14'), 
(3, 'Oba', 'Tsugami', '1960-12-01'), 
(4, 'Goscinny', 'Rene', '1940-05-13'), 
(5, 'Uderzo', 'Albert', '1941-12-03'); 

-- -------------------------------------------------------- 

-- 
-- Struktura tabeli dla tabeli `bandes` 
-- 

CREATE TABLE IF NOT EXISTS `bandes` (
    `bande_id` int(6) NOT NULL AUTO_INCREMENT, 
    `isbn` varchar(20) NOT NULL, 
    `date_pub` date NOT NULL, 
    `bande_titre` varchar(30) NOT NULL, 
    `bande_prix` float NOT NULL, 
    PRIMARY KEY (`bande_id`), 
    KEY `bande_id` (`bande_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; 

-- 
-- Zrzut danych tabeli `bandes` 
-- 

INSERT INTO `bandes` (`bande_id`, `isbn`, `date_pub`, `bande_titre`, `bande_prix`) VALUES 
(1, '250500949X', '2011-01-06', 'Rose de Versailles', 25), 
(2, '2849990736', '2009-01-01', 'Gen d''Hiroshima', 35), 
(3, '2505000328', '2007-01-18', 'Death Note', 8), 
(4, '201210133X', '2004-06-16', 'Astérix Le Gaulois', 10); 

-- -------------------------------------------------------- 

-- 
-- Struktura tabeli dla tabeli `bande_auteur` 
-- 

CREATE TABLE IF NOT EXISTS `bande_auteur` (
    `bande_id` int(6) NOT NULL, 
    `auteur_id` int(6) NOT NULL, 
    KEY `bande_id` (`bande_id`), 
    KEY `auteur_id` (`auteur_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

-- 
-- Zrzut danych tabeli `bande_auteur` 
-- 

INSERT INTO `bande_auteur` (`bande_id`, `auteur_id`) VALUES 
(1, 1), 
(2, 2), 
(3, 3), 
(4, 4), 
(4, 5); 

-- -------------------------------------------------------- 

-- 
-- Struktura tabeli dla tabeli `client` 
-- 

CREATE TABLE IF NOT EXISTS `client` (
    `client_id` int(6) NOT NULL AUTO_INCREMENT, 
    `client_nom` varchar(30) NOT NULL, 
    `client_prenom` varchar(30) NOT NULL, 
    `client_adresse` varchar(100) NOT NULL, 
    `client_tel` varchar(10) NOT NULL, 
    `client_email` varchar(30) NOT NULL, 
    PRIMARY KEY (`client_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; 

-- 
-- Zrzut danych tabeli `client` 
-- 

INSERT INTO `client` (`client_id`, `client_nom`, `client_prenom`, `client_adresse`, `client_tel`, `client_email`) VALUES 
(1, 'Dubois', 'Jean', '15, Avenue des Fleurs', '0482369777', '[email protected]'), 
(2, 'Leroy', 'Claire', '20, Bld Gambetta', '0623145879', '[email protected]'); 

-- -------------------------------------------------------- 

-- 
-- Struktura tabeli dla tabeli `commande` 
-- 

CREATE TABLE IF NOT EXISTS `commande` (
    `commande_id` int(6) NOT NULL AUTO_INCREMENT, 
    `commande_date` date NOT NULL, 
    `client_id` int(6) NOT NULL, 
    `commande_valeur` float NOT NULL, 
    PRIMARY KEY (`commande_id`), 
    KEY `commande_id` (`commande_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ; 

-- 
-- Zrzut danych tabeli `commande` 
-- 

INSERT INTO `commande` (`commande_id`, `commande_date`, `client_id`, `commande_valeur`) VALUES 
(1, '2015-10-30', 1, 0), 
(2, '2015-10-29', 2, 0); 

-- 
-- Ograniczenia dla zrzutów tabel 
-- 

-- 
-- Ograniczenia dla tabeli `articles_commandes` 
-- 
ALTER TABLE `articles_commandes` 
    ADD CONSTRAINT `articles_commandes_ibfk_2` FOREIGN KEY (`bande_id`) REFERENCES `bandes` (`bande_id`), 
    ADD CONSTRAINT `articles_commandes_ibfk_1` FOREIGN KEY (`commande_id`) REFERENCES `commande` (`commande_id`); 

-- 
-- Ograniczenia dla tabeli `bande_auteur` 
-- 
ALTER TABLE `bande_auteur` 
    ADD CONSTRAINT `bande_auteur_ibfk_2` FOREIGN KEY (`auteur_id`) REFERENCES `auteur` (`auteur_id`), 
    ADD CONSTRAINT `bande_auteur_ibfk_1` FOREIGN KEY (`bande_id`) REFERENCES `bandes` (`bande_id`); 

/*!40101 SET [email protected]_CHARACTER_SET_CLIENT */; 
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */; 
/*!40101 SET [email protected]_COLLATION_CONNECTION */; 

ответ

2

Используя предоставленные данные SQL, следующий запрос имеет результат 59. Вы должны умножить price * quantite на каждые bande, что является частью commande_id=2.

SELECT SUM(bb.bande_prix * aa.quantite) AS total 
FROM articles_commandes AS aa 
INNER JOIN bandes AS bb 
ON aa.bande_id = bb.bande_id 
WHERE aa.commande_id = 2 
+0

Вы босс !!!! Огромное спасибо!!! – mike

+1

Я тоже. И если вы хотите, чтобы все команды были изменены, то измените: WHERE aa.commande_id = 2: GROUP BY aa.commande_id –

Смежные вопросы