我有数据: query url score a www.google.com 3 a www.facebook.com 2 a www.google.com 1 我想通过其域"分组"条目,然后按(desc)按每个组的最高分数订购域组,因此我得到: query url score a www.google.com 3 a www.google.com 1 a www.facebook.com 2 尝试:从表订单desc中选择 * *从表顺序中,url asc不起作用.它给出(没有明显的更改): query url score a www.google.com 3 a www.facebook.com 2 a www.google.com 1 解决方案 您可以使用窗口函数 - 如果您正在运行MySQL 8.0: select * from mytable order by max(score) over(partiti
以下是关于 subquery 的编程技术问答
我在PHP中遇到了错误.将此字符串格式化以传递到php中的mysql_query()的正确方法是什么? SELECT count(*) FROM agents INTO @AgentCount; SELECT user_agent_parsed, user_agent_original, COUNT( user_agent_parsed ) AS thecount, COUNT( * ) / ( @AgentCount) AS percentage FROM agents GROUP BY user_agent_parsed ORDER BY thecount DESC LIMIT 50; 在PHP中,这是我设置$ query 的方式 $query = " SELECT count(*) FROM agents INTO @AgentCount; SELECT user_agent_parsed, user_agent_or
我有一些我想与ZendFW一起使用的SQL,但是我无法正常工作,这使我发疯.我在此查询中获得了正确的结果: SELECT DISTINCT e.festival_id FROM entries AS e, mail_log as m WHERE e.status = 1 AND e.festival_id NOT IN (SELECT m.entry_id FROM entries AS e, mail_log as m WHERE m.entry_id = e.festival_id) 帮助您将不胜感激.欢呼:) 解决方案 Goran的答案是最好的答案.但是,如果您想要zend_db_table样式查询,这将是一种替代方法: $sql = $table->select() ->setIntegrityCheck(false) ->from('entries', new Zend_Db_Expr('DISTINCT f
是否可以在yii? 我有这样的查询: select * from table1 where table1.field1 in (select table2.field2 from table2) 我目前正在使用休假代码: object1::model()->findAll(array('condition'=>'t.field1 in (select table2.field2 from table2)')) [编辑] 我想知道是否有一种不使用SQL而不使用JONINS构建子问题的方式. . 有解决方案吗? 预先感谢. 解决方案 首先通过DB字段找到Doublets: $model=new MyModel('search'); $model->unsetAttributes(); $criteria=new CDbCriteria(); $criteria->select='col1,col2,col3'; $criteria->
编辑: 尽管这个问题最初是针对我在下面描述的查询的特定的,但我得到的答案几乎适用于与使用laravel中使用派生表/子查询有关的所有问题 原始问题: 最近,我有点卡在Laravel查询构建器上.它具有一些非常不错的功能,但我觉得它不是为更复杂的数据库操作而构建的. 这是我要构建的查询: select 'IFNULL(counted.product_count, 0) AS product_count', 'uncounted.value', 'uncounted.attribute_id', 'uncounted.attribute_option_id' from ( select 'counted.id', 'counted.attribute_id', 'counted.value', 'count(counted.attribute_id)
我正在研究Laravel 4. 众所周知,我可以进行子查询: Project::whereIn('project_id', function($q) { $q->select('project_id') ->from('company') ->whereNull('deleted_at'); }); 我发现并发症,我无法在子查询中使用范围,并且禁用soft_delete会使我如此更改源代码. 我希望是: Project::whereIn('project_id', function(&$q) { $q = Company::select('project_id')->getQuery(); }); 现在,我可以添加范围,轻松禁用soft_delete. 我尝试并找到了一个解决方案,我必须更改Laravel的数据库\ Query \ builder code,where whereinsub,第786行.
如何从mysql中的子查询中指定父级查询字段? 例如: 我已经在PHP中写了一个基本的公告板类型程序. 在数据库中,每个帖子包含:id(pk)和parent_id(父帖的ID).如果帖子本身是父母,则其parent_id设置为0. 我正在尝试编写一个MySQL查询,该查询将找到每个父帖和父母的数量. $query = "SELECT id, ( SELECT COUNT(1) FROM post_table WHERE parent_id = id ) as num_children FROM post_table WHERE parent_id = 0"; 棘手的部分是第一个 id 不知道它应该指的是在子查询之外的第二个 id .我知道我可以选择ID为ID_TMP,然后在子查询中参考它,但是如果我还要返回ID并将" ID"保留为列名称,那么我必须进行返回的查询我的2列具有相同的数据(对我来说似乎很混乱) $qu
我该如何在laravel中进行此查询: SELECT `p`.`id`, `p`.`name`, `p`.`img`, `p`.`safe_name`, `p`.`sku`, `p`.`productstatusid` FROM `products` p WHERE `p`.`id` IN ( SELECT `product_id` FROM `product_category` WHERE `category_id` IN ('223', '15') ) AND `p`.`active`=1 我也可以通过加入来做到这一点,但是我需要这种格式以进行性能. 解决方案 考虑此代码: Products::whereIn('id', function($query){ $query->select('paper_type_id') ->from(wit
我有一项任务,要求我退还由霍夫曼姓氏教师教授的学生的细节,我被困了. SELECT * FROM Public."Class" WHERE tid=( SELECT tid FROM Public."Tutor" WHERE tname LIKE '%Hoffman'); 这返回了我,霍夫曼(Hoffman)教授的课程,但我不确定要去哪里.我相信我必须访问"注册"桌子,然后最后一张学生桌,但试图无济于事.以下查询是在打破查询之前得到的,我确定我必须使用HAVING或IN关键字,但我不太知道该如何处理! SELECT * FROM Public."Student" WHERE programme='IT' ( SELECT * FROM Public."Class" WHERE tid=( SELECT tid FROM Public."Tutor" WHERE tname LIKE '%Hoffman') ); 任何
我需要计算来自不同(!)表的行数,并保存结果作为某种统计数据.该脚本非常简单并且可以按预期工作,但是我想知道使用单个查询(在这种情况下)8个子查询是否更好,或者我是否应该使用单独的8个查询,或者是否有更好,更快,更快的速度高级解决方案... 我正在使用已准备好的语句的mysqli,因此单个查询看起来像这样: $sql = 'SELECT (SELECT COUNT(cat1_id) FROM `cat1`), (SELECT COUNT(cat2_id) FROM `cat2`), (SELECT COUNT(cat2_id) FROM `cat2` WHERE `date` >= DATE(NOW())), (SELECT COUNT(cat3_id) FROM `cat3`), (SELECT COUNT(cat4_id) FROM `cat4`),
我有此查询: SELECT p.id, r.status, r.title FROM page AS p INNER JOIN page_revision as r ON r.pageId = p.id AND ( r.id = (SELECT MAX(r2.id) from page_revision as r2 WHERE r2.pageId = r.pageId AND r2.status = 'active') OR r.id = (SELECT MAX(r2.id) from page_revision as r2 WHERE r2.pageId = r.pageId) ) 返回每个页面和每个页面的最新活动修订版,除非没有活动修订可用,在这种情况下,它只会返回最新的修订. 有什么方法可以优化以提高性能或仅仅是一般的可读性?我现在没有任何问题,但是我担心的是,当这进入生产环境(可能有很多页面的)时,它会表现不佳.
我已经尝试了解决方案在这里 ,但它行不通. 我的桌子是这样的: `Index` uid dept ........................... 1 001 dept1 2 001 dept2 3 001 dept3 4 002 dept2 5 002 dept3 6 002 dept4 7 003 dept1 8 003 dept5 9 004 dept1 10 004 dept6 我想用特定的dept检索所有行.也就是说,如果我想检索dept1,我想检索除uid = 002以外的所有行,因为uid = 002. 没有dept1 即使使用索引时,查询字符串也很慢: SELECT id FROM table WHERE uid
我正在研究一个系统,其中许多公司都可以将中小型企业信息上传到数据库中并进行搜索. 表import_data存储由不同公司上传的中小企业信息. 每个公司上传的信息由表import_data的列company_id标识. CREATE TABLE import_data ( id uuid NOT NULL, # Indexed company_id integer NOT NULL, # Indexed business_name character varying, # Indexed no_of_rating double precision, # Indexed no_of_reviews double precision, # Indexed phone character varying, # Indexed email character varying, # Ind
我试图在几行上获取一些平均值和一些总和,每天每小时分组.另外,我想获取一个额外的列,其中我每小时都没有得到总和(分组时会获取),但是我想在所有行上获取总和直到该特定日期. SQL-Statement发布在下面. 我的问题现在是,在〜25k行超过25k行上执行查询大约需要8秒钟(CPU I5/8GB RAM).我发现子选择(... AS 'rain_sum')使其非常慢.我的问题现在是:我认为以一种过于复杂的方式吗?是否有一种更简单的方法可以从下面的查询中获得相同的结果? SELECT `timestamp_local` AS `date`, AVG(`one`) AS `one_avg`, AVG(`two`) AS `two_avg`, SUM(`three`) AS `three_sum`, (SELECT SUM(`b`.`three`) FROM `table` AS `b` WHERE `b`.
受这个问题我决定测试函数,试图查看子查询是否效率不如等级.所以我创建了一个表: create table teste_rank ( codigo number(7), data_mov date, valor number(14,2) ); alter table teste_rank add constraint tst_rnk_pk primary key ( codigo, data_mov ); 并插入了一些记录... declare vdata date; begin dbms_random.initialize(120401); vdata := to_date('04011997','DDMMYYYY'); for reg in 1 .. 465 loop vdata := to_date('04011997','DDMMYYYY'); while vdata
我注意到SQL Server(在这种情况下为SQL Server 2008)如何处理Select语句中相关的子查询的情况有些意外.我的假设是,查询计划不应受到单纯的顺序,其中subsquies(或列)写在选择语句的投影条款中.但是,情况似乎并非如此. 考虑以下两个查询,除了在CTE中订购子查询外,它们是相同的: --query 1: subquery for Color is second WITH vw AS ( SELECT p.[ID], (SELECT TOP(1) [FirstName] FROM [Preference] WHERE p.ID = ID AND [FirstName] IS NOT NULL ORDER BY [LastModified] DESC) [FirstName], (SELECT TOP(1) [Color] FROM [Preference] WHERE p.ID = ID AND [Color] IS NOT NULL O
您如何制作一个SQL语句,该声明返回由子查询或JOIN或其他内容修改的结果,以处理您要返回的信息? 例如: CREATE TABLE bowlers ( bowling_id int4 not null primary key auto_increment, name text, team text ); 某人可能会错误地加入一个以上的团队: INSERT INTO `bowlers` (`name`, `team`) VALUES ('homer', 'pin pals'), ('moe', 'pin pals'), ('carl', 'pin pals'), ('lenny', 'pin pals'), ('homer', 'The homer team'), ('bart', 'The homer team'), ('maggie', 'The homer team'), ('lisa', 'The homer team'), ('marge', 'The h
我想知道我是否有加入查询类似的东西 - Select E.Id,E.Name from Employee E join Dept D on E.DeptId=D.Id 和子查询类似的东西 - Select E.Id,E.Name from Employee Where DeptId in (Select Id from Dept) 当我考虑 performance 两个查询中的哪个会更快,而为什么? 也有一段时间我应该喜欢一个吗? 对不起,如果这太微不足道并以前问过,但是我对此感到困惑.另外,如果你们可以建议我工具我应该用来衡量两个查询的性能,那就太好了.非常感谢! 解决方案 我希望第一个查询会更快,这主要是因为您具有等效性和明确的加入.根据我的经验,IN是一个非常缓慢的操作员,因为SQL通常将其评估为一系列WHERE子句,该子句被"或"(WHERE x=Y OR x=Z OR...)分开. 与SQL一样,您的里程可能会有所不同.速度将在很大
假设两个表 - userrole(userroleid,userId,ralesID)和userpermission(userpermissionId,userId,surmissionId,regionID). 我有以下带有子查询的插入,可以在每个用户ID中创建具有特定ralesID的每个用户的新行: INSERT INTO UserPermission (UserPermissionID, UserID, PermissionID, RegionID) SELECT NEWID(), UserID, @PermID, NULL FROM UserRole WHERE RoleID = '' 如何检查我要插入的行是否在数据库中是否存在?我知道如何检查单个记录(如果不存在(blah blah)),但是检查特定用户ID和许可的组合是什么最好的方法在UserPermission表中的一排? 解决方案 应该可以实现: INSERT I
我想在用户搜索结果中显示他们的照片.不仅是阿凡达照片,而且还有3张照片.照片位于额外的表格user_photos中.如果我每个用户都会获得单行,则答案很清楚 - 内在加入.但是我将为每个用户提供多散条. 我可以使用的第一个方法是加入: SELECT * FROM users INNER JOIN photos ON photos.user_id=users.user_id 在这种情况下,我需要一些额外的PHP代码才能将结果与相同的user_id合并.这样的东西: foreach($results as $result){ if(isset($user[$result['user_id']]['age'])){ $user[$result['user_id']]['photos'][] = $result['photo']; continue; } $user[$result['user_id']]['age'] = $resu