如何为以下任务获取正确的sql select函数

时间:2014-09-22 17:02:25

标签: php mysql sql

我需要在以下网页上显示每个汽车品牌的2014年总销售额:

http://test.com/example/2014/8

htaccess文件:

RewriteRule ^example/([^/]+)/([^/]+)$ test?year=$1&monthnumber=$2 [L,QSA]

示例数据(carbrand,年,月数,销售额):

carbrand  year  month  sales
----------------------------
Mercedes  2014     8    2800
BMW       2014     8    3000
Audi      2014     8    2700
Mercedes  2014     7    2600
BMW       2014     7    2900
Audi      2014     7    2400

HTML / PHP的:

<?php
    $year= $_GET['year'];
    $monthnumber= $_GET['monthnumber'];

(现在棘手的部分)

    $sql = "SELECT ........

我需要sql select函数来做三件事:

  • 步骤1:找到2014年销售车辆的所有不同汽车品牌=&gt; SELECT distinct carbrand FROM example-table WHERE year =:year
  • 步骤2:计算当年每个不同汽车品牌的总销售额=&gt;为每个汽车品牌选择“SUM(销售)”“WHERE year =:year
  • 第3步:按总销售额排序结果,desc =&gt;订购“每个汽车品牌的SUM(销售)”DESC

    $stmt = $pdo->prepare($sql);
    $stmt->bindParam(":year", $year);
    $stmt->execute();
    
    if($result = $stmt->fetch(PDO::FETCH_ASSOC))
    {
    ?>
    
    <?php echo $result['carbrand'];?> <?php echo $result['(sum sales for that brand in a given year'];?>
    
    <?php
    }// end if
    else {
    echo '0 results';
    }// end else
    ?>
    

我的例子的结果应该是:

  • 宝马,5900
  • Mercedes,5400
  • Audi,5100

我无法弄清楚如何编写正确的sql函数给我这些结果。更具体地说,我不知道如何在步骤2和步骤3中包含不同的汽车品牌。

任何人都可以帮我解决这个sql函数吗?

1 个答案:

答案 0 :(得分:1)

您的考虑几乎是正确的。只有第一个“区别”是错误的。 正如评论中指出的那样,您应该使用GROUP BY:

SELECT
    carbrand,
    SUM(sales) totals
FROM
    your_table
WHERE
    year = 2014
GROUP BY
    carbrand
ORDER BY
    totals DESC

Demo

如果您正在使用像SUM()这样的聚合函数,那么您几乎想要对数据进行分组。因此,您可以在Functions and Modifiers for Use with GROUP BY Clauses一章中找到这些功能。