表 who
wid--name-------father---mother
1----Daisy------David----Liza
2----Jenny------Joe------Judy
3----Meggy------Mike-----Manuela
4----Sarah------Joe------Judy
5----Chelsea----Bill-----Hillary
6----Cindy------David----Liza
7----Kelly------Joe------Judy
Run Code Online (Sandbox Code Playgroud)
表 ages
aid---whoid---age
1-----1--------0
2-----2--------0
3-----3-------14
4-----4-------30
5-----5-------22
6-----6-------17
7-----1-------18
Run Code Online (Sandbox Code Playgroud)
我希望该列表成为结果:
id---name------age
1----Meggy-----14
2----Cindy-----17
3----Daisy-----18 (Selected data that bigger than 0)
4----Chelsea---22
5----Sarah-----30
6----Jenny-----30 (Her age is 0 on ages table and Sarah's age with same father and mother)
7----Kelly-----30 (No data on ages table and Sarah's age with same father and mother)
Run Code Online (Sandbox Code Playgroud)
我试过那个查询:
SELECT
*,
(CASE age
WHEN '0' THEN (
SELECT age
FROM ages a
LEFT JOIN who …Run Code Online (Sandbox Code Playgroud) 我正在尝试按字段(年份)对我的实体进行分组并对其进行计数.
码:
public function countYear()
{
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select('b.year, COUNT(b.id)')
->from('\My\Entity\Album', 'b')
->where('b.year IS NOT NULL')
->addOrderBy('sclr1', 'DESC')
->addGroupBy('b.year');
$query = $qb->getQuery();
die($query->getSQL());
$result = $query->execute();
//die(print_r($result));
return $result;
}
Run Code Online (Sandbox Code Playgroud)
我似乎无法说,COUNT(b.id) AS count因为它给出了一个错误,我不知道该用什么作为addOrderby(???, 'DESC')值?
这是我的查询:
SELECT `p`.`name` AS 'postauthor', `a`.`name` AS 'authorname',
`fr`.`pid`, `fp`.`post_topic` AS 'threadname', `fr`.`reason`
FROM `z_forum_reports` `fr`
LEFT JOIN `forums` `f` ON (`f`.`id` = `fr`.`pid`)
LEFT JOIN `forums` `fp` ON (`f`.`first_post` = `fp`.`id`)
LEFT JOIN `ps` `p` ON (`p`.`id` = `f`.`author_guid`)
LEFT JOIN `ps` `a` ON (`a`.`account_id` = `fr`.`author`)
Run Code Online (Sandbox Code Playgroud)
我的问题是这个左连接:
SELECT `a`.`name`, `a`.`level`
[..]
LEFT JOIN `ps` `a` ON (`a`.`account_id` = `fr`.`author`)
Run Code Online (Sandbox Code Playgroud)
因为,如果a有很多行,它会像我的情况一样返回:
NAME | LEVEL
Test1 | 1
Test2 | 120
Test3 | 2
Test4 | 1
Run Code Online (Sandbox Code Playgroud)
我希望它选择 …
SELECT Departamentos.Nome_Dep,
Funcionarios.Nome AS Funcionario,
Funcionarios.Salario,
AVG(Funcionarios.Salario) OVER(PARTITION BY Departamentos.Nome_Dep) "Média por Departamento"
Salario - AVG(Funcionarios.Salario) OVER(PARTITION BY Departamentos.Nome_Dep) "Diferença de Salário" FROM Funcionarios
INNER JOIN Departamentos
ON Funcionarios.ID_Dep = Departamentos.ID
ORDER BY 5 DESC
Run Code Online (Sandbox Code Playgroud)
5号令令我失望.我从来都不喜欢它.订单按[colunmname]是,但订单按[编号],从未见过.我把它从一篇文章中删除了.
注意:这是T-SQL.
我希望第一个选项的名单列表为数据库中的"全部".但我不会将"全部"插入数据库,只需要检索时间.所以,我写了这个查询.
Select 0 PartyId, 'All' Name
Union
select PartyId, Name
from PartyMst
Run Code Online (Sandbox Code Playgroud)
这是我的结果
0 All
1 SHIV ELECTRONICS
2 AAKASH & CO.
3 SHAH & CO.
Run Code Online (Sandbox Code Playgroud)
当我使用order by Name它时显示以下结果.
2 AAKASH & CO.
0 All
3 SHAH & CO.
1 SHIV ELECTRONICS
Run Code Online (Sandbox Code Playgroud)
但是,我希望第一个选项为"全部",然后按排序顺序列出各方.我怎样才能做到这一点?
MySQL提供了一个名为FIELD()的字符串函数,它接受可变数量的参数.返回值是剩余值列表中第一个参数的位置.换一种说法:
FIELD('d', 'a', 'b', 'c', 'd', 'e', 'f')
Run Code Online (Sandbox Code Playgroud)
将返回4,因为'd'是第一个之后的第四个参数.
此函数提供基于非常特定的排序对查询结果进行排序的功能.对于我目前的申请,我需要管理四种状态:活跃,已批准,拒绝和提交.但是,如果我只是按状态列进行排序,我觉得结果列表的可用性会降低,因为被拒绝的活动状态项比提交和批准的项更重要.
在MySQL中,我可以这样做:
SELECT <stuff> FROM <table> WHERE <conditions> ORDER BY FIELD(status, 'rejected', 'active','submitted', 'approved')
Run Code Online (Sandbox Code Playgroud)
并且将对结果进行排序,以便首先拒绝项目,然后是活动项目,依此类推.因此,结果的排序降低了对访客的重要性.
我可以创建一个单独的表来枚举状态的这个重要性级别,然后按降序排序查询,但是自从切换到MS SQL Server以来,这已经出现了几次,所以我想我会查询到是否可以使用类似于MySQL的FIELD()的内置函数来避免额外的表和更复杂的查询.
谢谢
David Kees
我ORDER BY在下表中遇到了Postgres 问题:
em_code name
EM001 AAA
EM999 BBB
EM1000 CCC
Run Code Online (Sandbox Code Playgroud)
要向表中插入新记录,
SELECT * FROM employees ORDER BY em_code DESCec_alphaec_numec_num++ec_alpha再次当em_code到达EM1000,上述算法失败.
第一步将返回EM999而不是EM1000,它将再次生成EM1000为新的em_code,打破了唯一键约束.
知道如何选择EM1000吗?
可能重复:
为什么SQL查询的结果不会按照我期望的顺序返回?
从阅读7.5排序行和我在PostgreSQL中看到的问题,我的印象如下,但该部分并不完全明确,所以如果有人可以验证我将不胜感激:
SELECT * FROM items;
Run Code Online (Sandbox Code Playgroud)
没有保证的订单.
SELECT * FROM items ORDER BY published_date ASC;
Run Code Online (Sandbox Code Playgroud)
保证两个项目具有不同的日期来,在给定的顺序,但并不能保证两个项目具有相同的日期总是以相同的顺序.
SELECT * FROM items ORDER BY published_date ASC, id ASC;
Run Code Online (Sandbox Code Playgroud)
始终以相同的顺序返回项目,因为它是完全确定的.
我有这个权利吗?
我不太清楚对一个属性(例如published_date)的排序是否保证具有相同值的记录的顺序,如第二个示例中所示.
我有一张桌子:
+------+---------+-
| id | parent |
+------+---------+
| 2043 | NULL |
| 2044 | 2043 |
| 2045 | 2043 |
| 2049 | 2043 |
| 2047 | NULL |
| 2048 | 2047 |
| 2043 | 2047 |
+------+---------+
Run Code Online (Sandbox Code Playgroud)
它显示了一个简单的2级"亲子" - 核心.我怎样才能通过SELECT语句来获取上面列表中的顺序,这意味着:第一个父项,第一个父项的子项,第二个父项,第二个父项的子项等等(如果我有,我可以添加为孩子们订购BY ...我希望).是否可以添加排序字段?
我想在我的SQL server 2012查询中使用OFFSET和Fetch.但没有任何顺序.我不能使用order by.Because我的排序顺序将丢失.我如何使用OFFSET和Fetch没有order by和行号以及我的查询中的位置?我的2个选择表具有相同的结构.
INSERT INTO @TempTable [some columns]
select [some columns] from table1 order by col1
INSERT INTO @TempTable [same columns]
select [some columns] from table2 order by col2
select * from @TempTable OFFSET 20 ROWS FETCH NEXT 50 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)
此查询在OFFSET关键字处有语法错误.
sql-order-by ×10
sql ×5
mysql ×4
sql-server ×3
postgresql ×2
t-sql ×2
case ×1
doctrine-orm ×1
fetch ×1
join ×1
left-join ×1
natural-sort ×1
offset ×1
select ×1
types ×1
union ×1