1

私は次のMySQLクエリを持っています:

SELECT
s.student_id, s.student_firstname, s.student_lastname, s.isActive, 
    c.city_name,
    sd.student_startdate, sd.student_enddate,
    SUM(scpe.scpe_estemated_days) AS total
        FROM students s 
            INNER JOIN cityselections c ON c.city_id = s.student_city_id
            INNER JOIN studentdates sd ON sd.student_id = s.student_id
            LEFT JOIN studentcourseplan scp ON scp.student_id = s.student_id
            LEFT JOIN studentcourseplanelements scpe ON scpe.scpe_cpl_id = scp.cpl_id
                GROUP BY scp.cpl_id

これは出力できます:

+------------+-------------------+------------------+----------+------------+-------------------+-----------------+-------+
| student_id | student_firstname | student_lastname | isActive | city_name  | student_startdate | student_enddate | total |
+------------+-------------------+------------------+----------+------------+-------------------+-----------------+-------+
| 83         | John              | Doe              | 1        | Dallas     | 2012-07-23        | 2012-09-30      | 413   |
| 84         | Derp              | Derpson          | 1        | Texas      | 2012-07-01        | 2012-08-26      | 413   |
| 85         | Barack            | Obama            | 1        | Washington | 2012-08-02        | 2012-08-31      | 2     |
| 85         | Barack            | Obama            | 1        | Washington | 2012-08-02        | 2012-08-31      | 153   |
+------------+-------------------+------------------+----------+------------+-------------------+-----------------+-------+

totalここで、それぞれの列の値が最も高い行のみを印刷したいと思います。student_id

試しMySQL MAX()ましたが、うまくいきませんでした。

それはどのように行われるべきですか?

4

2 に答える 2

0

このクエリを使用してみてください...

SELECT A.student_id, A.student_firstname, A.student_lastname, A.isActive, 
    A.city_name,
    A.student_startdate, A.student_enddate,
    MAX(A.total)
 FROM (SELECT
s.student_id, s.student_firstname, s.student_lastname, s.isActive, 
    c.city_name,
    sd.student_startdate, sd.student_enddate,
    SUM(scpe.scpe_estemated_days) AS total
        FROM students s 
            INNER JOIN cityselections c ON c.city_id = s.student_city_id
            INNER JOIN studentdates sd ON sd.student_id = s.student_id
            LEFT JOIN studentcourseplan scp ON scp.student_id = s.student_id
            LEFT JOIN studentcourseplanelements scpe ON scpe.scpe_cpl_id = scp.cpl_id
                GROUP BY scp.cpl_id) AS A
GROUP BY A.student_id;

それが役に立てば幸い....

于 2012-08-28T14:33:23.263 に答える
0

サブクエリを使用することをお勧めします。

SELECT s.student_id, s.student_firstname, s.student_lastname, s.isActive,
  c.city_name, sd.student_startdate, sd.student_enddate,
    (SELECT SUM(scpe.scpe_estemated_days) 
       FROM studentcourseplan scp
       LEFT JOIN studentcourseplanelements scpe ON scpe.scpe_cpl_id = scp.cpl_id
       WHERE scp.student_id = s.student_id) AS scpe_estemated_days
FROM students s
INNER JOIN cityselections c ON c.city_id = s.student_city_id
INNER JOIN studentdates sd ON sd.student_id = s.student_id;

フィドルを参照してください。

アグリゲートに含まれていない属性を選択するため、shubhanshの回答を使用しないことをお勧めします。これは不適切な方法です。

標準SQLでは、GROUP BY句を含むクエリは、GROUPBY句で指定されていない選択リスト内の非集計列を参照できません。たとえば、選択リストの名前列がGROUP BYに表示されないため、このクエリは標準SQLでは無効です。

SELECT o.custid, c.name, MAX(o.payment)
  FROM orders AS o, customers AS c
  WHERE o.custid = c.custid
  GROUP BY o.custid;

MySQLはGROUPBYの使用を拡張して、選択リストがGROUPBY句で指定されていない非集計列を参照できるようにします。これは、前述のクエリがMySQLで有効であることを意味します。

マニュアルを参照してください。

于 2012-08-28T14:54:06.667 に答える