【问题标题】:MySQL. Average price, connecting two databasesmysql。平均价格,连接两个数据库
【发布时间】:2014-05-17 13:42:27
【问题描述】:

我正在学习 MySQL,但我目前不明白如何做某事。 我有两张桌子,我想展示一些东西,这很难解释,所以我宁愿给你看。 这些是我的桌子:

CREATE TABLE IF NOT EXISTS `proprietate` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `serie_buletin` varchar(8) NOT NULL,
  `cnp` bigint(20) NOT NULL,
  `nr_vehicul` int(11) NOT NULL,
  `data_cumpararii` date NOT NULL,
  `pret` int(11) NOT NULL,
  `id_persoana` int(11) NOT NULL,
  PRIMARY KEY (id),
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ;


CREATE TABLE IF NOT EXISTS `vehicul` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nr_vehicul` int(11) NOT NULL,
  `marca` varchar(30) NOT NULL,
  `id_marca` int(11) NOT NULL,
  `tip` varchar(15) NOT NULL,
  `culoare` varchar(15) NOT NULL,
  `capacitate_cilindrica` int(11) NOT NULL,
  `id_proprietate` int(11) NOT NULL,
  PRIMARY KEY (id),
  FOREIGN KEY (id_proprietate) REFERENCES proprietate(id)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ;

这些是我在表格中的值:

INSERT INTO `proprietate` (`id`, `serie_buletin`, `cnp`, `nr_vehicul`, `data_cumpararii`, `pret`, `id_persoana`) VALUES
(1, 'AK162332', 2006036035087, 4, '2014-05-01', 35000, 1),
(2, 'AK162332', 2006036035087, 10, '2014-05-02', 90000, 2),
(3, 'AK176233', 6548751520125, 2, '2014-05-03', 55000, 3),
(4, 'BZ257743', 6548751520125, 2, '2014-05-04', 25000, 4),
(5, 'BZ257743', 2006036035087, 15, '2014-05-05', 63000, 5),
(6, 'DC456542', 2003564784513, 7, '2014-05-06', 30000, 6),
(7, 'EN654872', 2012654879521, 6, '2014-05-07', 50000, 7);

INSERT INTO `vehicul` (`id`, `nr_vehicul`, `marca`, `id_marca`, `tip`, `culoare`, `capacitate_cilindrica`, `id_proprietate`) VALUES
(1, 4, 'Mercedes', 1, 'CLK 350', 'negru', 3500, 1),
(2, 10, 'Mercedes', 1, 'S 500', 'silver', 5000, 2),
(3, 2, 'Mercedes', 1, 'ML 550', 'alb', 5500, 3),
(4, 2, 'BMW', 2, '325', 'galben', 2500, 4),
(5, 15, 'BMW', 2, 'X5', 'negru', 3500, 5),
(6, 7, 'Audi', 3, 'R5', 'mov', 5000, 6),
(7, 6, 'Audi', 3, 'Q5', 'metalic', 3000, 7);

我要显示的是:

 marca    |  nr_vehicul   |  average_price
  Audi    |      13       |     40000
  BMW     |      17       |     44000
Mercedes  |      16       |     60000

我该怎么做?到目前为止,我已经设法显示了前两列,但我不知道如何在第二列中引用第一个表并计算平均价格。 这是我目前所拥有的:

SELECT marca, SUM(nr_vehicul) AS nr_vehicul FROM vehicul GROUP BY marca

谁能帮帮我?

【问题讨论】:

  • @Mihai:我会复习一下你给我的东西,谢谢。希望我能理解。
  • @Strawberry:如果您要发布无用的 cmets 甚至不尝试帮助我,请不要发布。请。是的,我确实发布了类似的内容,但我想完全了解我在做什么。
  • 别担心,我们都是初学者。我可以为您提供解决方案,但如果您花时间了解 JOIN,对您来说会更好。

标签: mysql sql database join


【解决方案1】:

您应该加入您的表格以从它们中获取组合信息:

SELECT marca, SUM(vehicul.nr_vehicul) AS nr_vehicul, avg(pret) as pret
FROM vehicul 
    LEFT OUTER JOIN proprietate on (id_proprietate = proprietate.id)
GROUP BY marca;

查看this sql fiddle session 的输出。

首先您选择您需要的数据(使用了适当函数的列名):marca, SUM(vehicul.nr_vehicul), AVG(pret),然后构建连接结构,mysql 应该从中检索这些信息:vehiculproprietate

对于此结构,您主要需要vehicul 表,您将通过该表对结果集进行分组。您希望将专有表正确连接到车辆表,以确保创建正确的数据结构。由于您有从一个表到另一个表的外键,因此最简单的方法是使用该键:LEFT OUTER JOIN proprietate on (id_proprietate = proprietate.id)

有关了解不同 JOIN 类型的更多信息,please see this article by Craig Buckler

【讨论】:

  • 这是我正在寻找的,但我不想只是复制和粘贴答案。我想确保我明白你做了什么。基本上,您已经选择了“marca”列,从“vehicul”表中对“nr_vehicul”列求和,并在将“proprietate”表加入第一个表后计算了“pret”的平均价格,并且您在“专有”中的 PK 与“车辆”中的 FK 之间建立了联系?
  • @MrSilent,是的,就是这样。请参阅我的更新以获得解释。
【解决方案2】:

$query = "SELECT type, AVG(pret) FROM vehicul GROUP BY marca";
    $result = mysql_query($query) 或 die(mysql_error());
    // 打印结果
    而($row = mysql_fetch_array($result)){
    回显“的平均价格”。 $行['类型']。 " 是 $".$row['AVG(price)'];}

应该返回每个 marca 的平均价格

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多