我有以下两个表:
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
我的查询结果应如下所示:
我正在尝试运行以下查询以列出Lab Assistant及每个学期的工作小时数
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
所以基本上,它只是不计算丹尼斯罗德曼的正确时间。它应该是8而不是4。
我可能不应该在这里使用DISTINCT,因为同一个人可能会在不同的学期工作。
答案 0 :(得分: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;
结果:
| LAB ASSISTANT | SEMESTER WORKED | HOURS WORKED |
---------------------------------------------------
| Dennis Rodman | Spring 2012 | 8 |
| Michael Jordan | Fall 2012 | 4 |
| Horace Grant | Fall 2012 | 5 |
答案 1 :(得分:1)
这是因为DISTINCT
是SELECT
的修饰符,不能像这样使用。在您的情况下,最好的是在GROUP BY
上应用hw.hw_semester
来修复它。
答案 2 :(得分:0)
MySQL syntax for SELECT
表示DISTINCT
需要在列名称之前:
SELECT
[ALL | DISTINCT | DISTINCTROW ]
[ .. etc .. ]
select_expr [, select_expr ...]
每个 select_expr 表示您要检索的列。
基本上,DISTINCT
只能应用于整个查询,而不能应用于单个列。