我有一些数据如下表:SQL选择寻找其他的记录更好的价值
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
CREATE TABLE `activities` (
`id` int(10) UNSIGNED NOT NULL,
`project_id` int(10) UNSIGNED NOT NULL,
`user_id` int(10) UNSIGNED NOT NULL,
`task_hour` double(8,2) NOT NULL,
`validated` tinyint(1) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `activities` (`id`, `project_id`, `user_id`, `task_hour`, `validated`) VALUES
(1, 1, 1, 10.00, 1),
(2, 1, 1, 20.00, 0),
(3, 2, 1, 5.00, 1),
(4, 3, 1, 30.00, 0);
当我做一个SELECT user_id,project_id,task_hour,validated FROM activities
,这里是我得到:
| user_id | project_id | task_hour | validated |
|---------|------------|-----------|-----------|
| 1 | 1 | 10 | true |
| 1 | 1 | 20 | false |
| 1 | 2 | 5 | true |
| 1 | 3 | 30 | false |
我想从选择中得到如下结果:
| user_id | task_hour_total |
|---------|-----------------|
| 1 | 45 |
这个结果来自task_hou r用于用户1,条件是只有在验证结果为true时才可以添加task_hour,或者如果验证为false,那么在表中没有相同user_id和project_id的记录且验证结果为true。
所以每行的理由是:
| user_id | project_id | task_hour | validated |
|---------|------------|-----------|-----------|
| 1 | 1 | 10 | true | -> include in the sum because validated is true
| 1 | 1 | 20 | false | -> do not include in the sum because validated is false and there is the first record which has same user_id, same project_id and validated is true
| 1 | 2 | 5 | true | -> include in the sum because validated is true
| 1 | 3 | 30 | false | -> include in the sum because validated is false and there is no record in this table for user_id 1 and project_id 3 where validated is true
我曾尝试以下,但它告诉我,这是不是在MySQL中右结构。这是第一个测试,以取得柱说,如果它发现在DB的另一个纪录,验证= TRUE为同一USER_ID和PROJECT_ID:
select @u = user_id, @p = project_id,task_hour,validated
case when (select count(*) from activities where user_id = @u and project_id = @p and validated = true) > 1 then 'validated found' end as found
from activities
谢谢你,如果你能帮助我在这一个...
什么是“不工作”的定义?任何错误?意外的输出?您使用共享的示例数据获得的输出是什么?在示例数据中,项目C未经过验证,但您仍在为其添加30个小时。是错字还是故意?如果有意识的话那么它是如何不同的,那么项目A小时20小时也是没有验证的? –
什么是你想从源表返回的字段? – Alexander
请参阅https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-查询 – Strawberry