MySQL的。平均价格,连接两个数据库

时间:2014-05-17 13:42:28

标签: mysql sql database join

我正在学习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

有人可以帮我吗?

2 个答案:

答案 0 :(得分:3)

您应该加入表格以获取两者的综合信息:

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表,您可以通过该表对结果集进行分组。您希望正确地将所有者表连接到vehicul表,以确保创建正确的数据结构。由于从一个表到另一个表都有外键,最简单的方法是使用该键:LEFT OUTER JOIN proprietate on (id_proprietate = proprietate.id)

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

答案 1 :(得分:0)

$query = "SELECT type, AVG(pret) FROM vehicul GROUP BY marca";  
    $result = mysql_query($query) or die(mysql_error());
    // Print out result
    while($row = mysql_fetch_array($result)){
    echo "The average price of ". $row['type']. " is $".$row['AVG(price)'];}</code>

应该返回每个马卡的平均价格