MySQL - 从3个表中计算不同的值

时间:2013-06-14 16:14:04

标签: mysql

我创建了3个名为complete_shifts,incomplete_shifts和incomplete_shift_register的表。所有三个表都包含2个名为employee_no和date的列。我想从指定日期的所有三个表中的employee_no列中获取不同值的计数。

例如:如果我指定“ 日期= 2013-06-13 ”,则计数为 3 。 (员工编号: 0008,0019,0035

complete_shifts

shift_id |   date   | employee_no | sign_in_at | sign_out_at

1        |2013-06-13|   0008      | 7:05       | 16:05
2        |2013-06-13|   0008      | 7:10       | 16:05
3        |2013-06-14|   0025      | 7:11       | 16:10

incomplete_shifts

 shift_id  |    date   | employee_no |  sign_in_at |sign_out_at

   1       | 2013-06-13|    0019     |   7:08      |    

incomplete_shift_register

 shift_id |   date    |employee_no | sign_in_at

  1       | 2013-06-13|   0008     |    7:08
  2       | 2013-06-13|   0035     |    7:09
  3       | 2013-06-14|   0060     |    7:11

我不知道如何为上述情况编写SQL语法... plezzz帮助我..

谢谢。

3 个答案:

答案 0 :(得分:1)

这样的东西
SELECT  COUNT(DISTINCT employee_no) cnt_employee_no
FROM    (
    SELECT  employee_no
    FROM    complete_shifts
    WHERE   date = '2013-06-13'
    UNION 
    SELECT  employee_no
    FROM    incomplete_shifts
    WHERE   date = '2013-06-13'
    UNION 
    SELECT  employee_no
    FROM    incomplete_shift_register
    WHERE   date = '2013-06-13'
    )

使用

UNION Syntax

  

UNION用于组合多个SELECT语句的结果   到一个结果集。

COUNT(DISTINCT expr,[expr...])

  

返回具有不同非NULL expr的行数   值。

答案 1 :(得分:0)

只需UNION个表格和COUNTUNION将删除重复项,因此一个简单的COUNT即可实现 - 不需要COUNT DISTINCT。如果您只想要计数,这将有效;如果你想要其他值,那么查询会更加复杂:

SELECT COUNT(*) FROM (
  SELECT employee_no
    FROM complete_shifts
    WHERE date = '2013-06-13'
  UNION SELECT employee_no
    FROM incomplete_shifts
    WHERE date = '2013-06-13'
  UNION SELECT employee_no
    FROM incomplete_shift_register
    WHERE date = '2013-06-13'
 ) AllShifts

答案 2 :(得分:0)

SELECT count(*) from 
(
SELECT 1 from complete_shifts WHERE date="2013-06-13"
UNION ALL
SELECT 1 from incomplete_shifts WHERE date="2013-06-13"
UNION ALL
SELECT 1 from incomplete_shift_register WHERE date="2013-06-13"
)t