【问题标题】:SQL, show the total price of the orderSQL,显示订单总价
【发布时间】:2015-10-30 19:01:10
【问题描述】:

我一直在处理数据库任务。我被困在一个查询上:它必须显示为第二顺序订购的漫画(乐队)支付的总金额(commande_id:2), 这意味着首先我必须将每本书的价格乘以订购的数量(articles_commandes 中的数量)并将价格相加。我的例子是一位客户订购了 3 部不同的漫画,其中之一在 3 个示例中。我设法编写了总结这 3 部漫画的所有价格的查询,但是我没有设法将漫画的价格乘以它的数量。

这是我工作的 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
.                       | .              |
.                       | .              |
.                       |                | 
==========              |======          |======

首先是乐队(漫画):

其次是:articles_commandes(订购的产品)

这是一个查询,其中我将按订单 2 (command_id : 2) 订购的 3 本漫画书 (bande_id) 的价格相加

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

结果是:

但是我需要结果:59,因为第二部漫画被订购了 3 次:

订购第一本漫画书的价格:25 x 1 = 25

订购的第二本漫画书的价格:8 x 3 = 24(我遇到了问题!)

订购第三本漫画书的价格:10 x 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 @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@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', 'jean@gmail.com'),
(2, 'Leroy', 'Claire', '20, Bld Gambetta', '0623145879', 'claire@gmail.com');

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

--
-- 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 CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    使用提供的 sql 数据,以下查询的结果为59。您必须将price * quantite 乘以作为commande_id=2 一部分的每个bande

    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
    

    【讨论】:

    • 我也是。如果你想要所有的命令然后改变: WHERE aa.commande_id = 2 到这个: GROUP BY aa.commande_id
    猜你喜欢
    • 2021-03-16
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    相关资源
    最近更新 更多