这是场景:
我有一个包含3列的表:'KeyColumn','SubKeyColumn'和'BooleanColumn',其中前两个是表的主键.
对于我的查询,我想计算'KeyColumn'中任何给定值的行数,并且我也想知道哪些值为'BooleanColumn'的值为true.我最初的想法是创建一个这样的查询:
SELECT
COUNT(*)
,COUNT(CASE WHEN BooleanColumn = 1 THEN 1 ELSE 0 END)
FROM
MyTable
GROUP BY
KeyColumn
Run Code Online (Sandbox Code Playgroud)
但是,第二部分不起作用(我不完全确定为什么我认为它会开始).是否可以在一个查询中执行此类操作?或者我是否需要进行多次查询才能实现这一目标?
我有一个表有数据的表
state total A 3 B 6 C 2 D 7 E 4
我需要从中生成一个表,其中包含A&B(true)和C,D,E(False)的总和
Result Table Status Total True 9 (sum of A and B ) False 13 (sum of C, D, E)
有任何想法如何使用SQL做到这一点?我在Oracle中这样做
假设您有一个表,例如:
id status date
-----------------------
1 2 today
2 3 today
3 3 yesterday
4 2 yesterday
5 1 yesterday
Run Code Online (Sandbox Code Playgroud)
并且您希望查询计算给定日期的状态为1,2或3的数字或结果,在示例中,所需的结果集将为:
date status 1 status 2 status 3
count count count
------------------------------------------
today 0 1 1
yesterday 1 1 1
Run Code Online (Sandbox Code Playgroud)
谁能指出我正确的方向?谢谢.
我有两个类似布局的表,包括INCOME和EXPENSES.该id列是客户ID.
我需要一个客户TOTAL AMOUNT的结果,总结收入和支出.
Table: Income
| id | amountIN|
+--------------+
| 1 | a |
| 2 | b |
| 3 | c |
| 4 | d |
Table: Expenses
| id | amountOUT|
+---------------+
| 1 | -x |
| 4 | -z |
Run Code Online (Sandbox Code Playgroud)
我的问题是,有些客户只有开支,有些只是收入...所以无法提前知道我需要做的事情 LEFT or RIGHT JOIN.
在上面的例子中,RIGHT JOIN可以解决这个问题,但是如果情况被颠倒(Expenses表上有更多的客户)它就不起作用了.
Expected Result
| id | TotalAmount|
+--------------+
| 1 | a - x |
| 2 | b |
| 3 | c | …Run Code Online (Sandbox Code Playgroud) 我试图将计数,总和和平均值从一个表添加到另一个表,但我最终查询每个值的相同数据.我正在使用PostgreSQL.我正在向专家们讨论如何使这个更新语句更有效率.这里是:
update "table1" set
"col1" = (SELECT COUNT(*) FROM "table2" WHERE "table2Id" = "table1"."table1Id"),
"col2" = (SELECT AVG("someCol") FROM "table2" WHERE "table2Id" = "table1"."table1Id"),
"col3" = (SELECT SUM("someCol") FROM "table2" WHERE "table2Id" = "table1"."table1Id");
Run Code Online (Sandbox Code Playgroud)
我应该能够像这样运行一个子查询并访问更新的返回值,对吗?
SELECT COUNT(*), AVG("someCol"), SUM("someCol") FROM "table2" WHERE "table2Id" = "table1"."table1Id";
Run Code Online (Sandbox Code Playgroud)
任何帮助深表感谢.
给出以下(非常简化的)mysql表结构:
制品
产品类别
product_tags
我试图找到与某个product_tag有关联的每个产品,并且至少有一个与status-attribute为1的类别的关系.
我尝试了以下查询:
SELECT *
FROM `product` p
JOIN `product_categories` pc
ON p.`product_id` = pc.`product_id`
JOIN `product_tags` pt
ON p.`product_id` = pt.`product_id`
WHERE pt.`some_value` = 'some comparison value'
GROUP BY p.`product_id`
HAVING SUM( pc.`status` ) > 0
ORDER BY SUM( pt.`some_other_numeric_value` ) DESC
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:SUM(pt.some_other_numeric_value)返回意外值.
我意识到,如果有问题的产品有更多然后一个关系到product_categories表,然后每相对于product_tags表计为许多计时因为有关系的product_categories表!
例如:如果id = 1的产品与具有ids = 2,3和4的product_categories的关系,以及与具有ID 5和6的product_tags的关系 - 那么如果我插入a GROUP_CONCAT(pt.id),那么它确实给出了5,6,5 ,6,5,6而不是预期的5,6.
起初我怀疑它是与连接类型(左连接,右连接,内连接,等等)的一个问题,所以我想尽连接类型,我知道的,但无济于事.我还试图在GROUP …
我的代码如下:
SELECT Last, OrderLine.OrdID, OrdDate, SUM(Price*Qty) AS total_price
FROM ((Cus INNER JOIN Orders ON Cus.CID=Orders.CID)
INNER JOIN OrderLine
ON Orders.OrdID=OrderLine.OrdID)
INNER JOIN ProdFabric
ON OrderLine.PrID=ProdFabric.PrID
AND OrderLine.Fabric=ProdFabric.Fabric
GROUP BY Last
ORDER BY Last DESC, OrderLine.OrdID DESC;
Run Code Online (Sandbox Code Playgroud)
此代码之前已经得到了回答,但含糊不清.我想知道我哪里出错了.
您尝试执行不包含指定表达式"OrdID"的查询作为聚合函数的一部分.
是我不断得到的错误消息,无论我改变什么,它都会给我这个错误.是的我知道,它是用SQL-92编写的,但是我如何使它成为一个合法的功能呢?
我想在具有不同过滤器的同一字段上的查询中的'Amount'字段上使用SUM()函数4次.
就像是
SELECT Date1,CC,BU, SUM(Amount),SUM(Amount),SUM(Amount),SUM(Amount)
FROM MainTable<br>
GROUP BY CC,BU,Date1
Run Code Online (Sandbox Code Playgroud)
这里
第一个SUM(Amount)应该被计算时,Mode='011' 而Mode='012'从MainTable
第二次SUM(Amount)时,应计算Mode like '03_'而Mode Like '05_'从MainTable
3 SUM(Amount)时,应计算Mode like '10_'从MainTable
4日SUM(Amount)应计算时(Mode !='011'),并(Mode !='012') (Mode not Like '03_')和(Mode not Like '05_')来自MainTable
如何实现这一目标?我在很多方面尝试过,但无法按照我想要的方式得到结果.
请帮我.
先感谢您.
sql group-by aggregate-functions sql-server-2008 having-clause
因此,我试图结合进行查询和做到这一点,我需要弄清楚这是怎么回事。我对SQL Server还是比较陌生,因此我不得不深入研究一些复杂的qrys,有时我会陷入类似这样的简单问题。我的问题是使用了Sum(1)函数,但我不确定如何使用。这意味着我相信它正在计算重复项,但我无法根据它所提供的信息来判断。
这是查询
SELECT
qryReinsuranceDPA1.POLICY_NO,
qryReinsuranceDPA1.PHASE_CODE,
qryReinsuranceDPA1.SUB_PHASE_CODE,
qryReinsuranceDPA1.ProdType,
TotalDPA = Sum(case when [SumOfNetDefExtraAdj] Is Null then [SumOfNetDefPremiumAdj] else [SumOfNetDefPremiumAdj] + SumOfNetDefExtraAdj end),
Sum(1) AS Expr1
FROM qryPolicyListforNYDefPRemAsset_Re RIGHT JOIN qryReinsuranceDPA1
ON
qryReinsuranceDPA1.POLICY_NO = qryPolicyListforNYDefPRemAsset_Re.POLICY_NO AND
qryReinsuranceDPA1.PHASE_CODE= qryPolicyListforNYDefPRemAsset_Re.PHASE_CODE AND
qryReinsuranceDPA1.SUB_PHASE_CODE = qryPolicyListforNYDefPRemAsset_Re.SUB_PHASE_CODE
GROUP BY qryReinsuranceDPA1.POLICY_NO,
qryReinsuranceDPA1.PHASE_CODE,
qryReinsuranceDPA1.SUB_PHASE_CODE,
qryReinsuranceDPA1.ProdType
--HAVING (((Sum(1))<>1))
GO
Run Code Online (Sandbox Code Playgroud)
这只是它产生的一小部分样本(实际结果约为77,000)
POLICY_NO PHASE_CODE SUB_PHASE_CODE ProdType TotalDPA Expr1
228433800 0 1 TERM 282.324223 1
228439200 0 1 PERM 53.17048634 1
228439200 6 1 PERM 10.3805065 1
228441500 0 1 PERM 526.6883742 …Run Code Online (Sandbox Code Playgroud) 我有一个表格形式:
| ID | COURSE | PASS |
---------------------------
| 1 | 1 | 1 |
| 1 | 2 | 1 |
| 1 | 3 | 1 |
| 1 | 4 | 0 |
| 1 | 5 | 0 |
Run Code Online (Sandbox Code Playgroud)
我希望表格中的行:
| ID | FAILED | PASSED |
---------------------------
| 1 | 4,5 | 1,2,3 |
Run Code Online (Sandbox Code Playgroud)
唯一我认为是这样的:
select NVL(passed.id, failed.id), passed.test, failed.test from
(select id, listagg(course, ',') within group (order by course) test from table1 where …Run Code Online (Sandbox Code Playgroud)