0

次の2つのテーブルがあります。

lab_assistant
la_id - la_firstname - la_lastname
1 - Dennis - Rodman
2 - Michael - Jordan
3 - Horace - Grant

hours_worked
hw_semester - hw_date - hw_hours - la_id
Fall 2012 - 2012-11-01 - 4 - 2
Fall 2012 - 2012-11-04 - 5 - 3
Spring 2012 - 2012-02-12 - 4 - 1
Spring 2012 -2012-03-10 - 4 - 1

私のクエリの結果は次のようになります。

そして、次のクエリを実行して、ラボアシスタントと学期ごとに働いた時間数をリストしようとしています

SELECT DISTINCT(CONCAT(la.la_firstname, ' ', la.la_lastname)) AS 'Lab Assistant',
   hw.hw_semester AS 'Semester Worked', hw.hw_hours AS 'Hours Worked'
FROM lab_assistant la
    JOIN hours_worked hw
        ON la.la_id = hw.la_id;

私のクエリの結果は、次のようになることが想定されています。

Michael Jordan - Fall 2012 - 4
Horace Grant - Spring 2012 - 5
Dennis Rodman - Fall 2012 - 8

しかし、私が得ている結果は次のとおりです。

Michael Jordan - Fall 2012 - 4
Horace Grant - Fall 2012 - 5
Dennis Rodman - Spring 2012 - 4

基本的に、デニス・ロッドマンの適切な時間を数えていません。4 ではなく 8 にする必要があります。

同じ人が別の学期で働く可能性があるため、ここでは DISTINCT を使用しないでください。

4

3 に答える 3

2

DISTINCTの先頭に移動する必要がありますSELECT:

SELECT DISTINCT CONCAT(la.la_firstname, ' ', la.la_lastname) AS 'Lab Assistant',
    hw.hw_semester, COUNT(w.hw_hours)
FROM lab_assistant la
    JOIN hours_worked hw
        ON la.la_id = hw.la_id;

ただし、集計関数を使用しているため、次を使用する必要がありますGROUP BY

SELECT CONCAT(la.la_firstname, ' ', la.la_lastname) AS 'Lab Assistant',
    hw.hw_semester, COUNT(w.hw_hours)
FROM lab_assistant la
    JOIN hours_worked hw
        ON la.la_id = hw.la_id
GROUP BY hw.hw_semester;

編集に基づいて、次のようなものが必要です。

SELECT CONCAT(la.la_firstname, ' ', la.la_lastname) AS 'Lab Assistant',
  hw.hw_semester AS 'Semester Worked', 
  sum(hw.hw_hours) AS 'Hours Worked'
FROM lab_assistant la
JOIN hours_worked hw
  ON la.la_id = hw.la_id
GROUP BY la.la_id, hw.hw_semester;

デモで SQL Fiddle を参照してください

結果:

|  LAB ASSISTANT | SEMESTER WORKED | HOURS WORKED |
---------------------------------------------------
|  Dennis Rodman |     Spring 2012 |            8 |
| Michael Jordan |       Fall 2012 |            4 |
|   Horace Grant |       Fall 2012 |            5 |
于 2012-11-06T20:36:05.840 に答える
1

これはDISTINCTの修飾子でSELECTあり、そのようには使用できないためです。あなたの場合の最善の方法は、それを修正するためGROUP BYに onを適用することです。hw.hw_semester

于 2012-11-06T20:35:59.583 に答える
0

列名の前に来る必要があるショーのMySQL 構文:SELECTDISTINCT

SELECT
[ALL | DISTINCT | DISTINCTROW ]
  [ .. etc .. ]
select_expr [, select_expr ...]

select_exprは、取得する列を示します。

基本的にDISTINCT、単一の列ではなく、クエリ全体にのみ適用できます。

于 2012-11-06T20:36:12.520 に答える