2017.7.14 使用case when和group by將多條資料合併成一行,並且根據某些列的合併值做條件判斷來生成最終值
1.效果演示
(1)不做處理
(2)合併多列,並對後四列的值做並集處理
2.SQL語句
(1)不做處理
1 SELECT 2 C .fd_tenantid AS fdTenantId, 3 C .fd_resid AS fdResid, 4 C .fd_res_name AS fdResName, 5 C .fd_service AS fdService, 6 b.fd_get AS fdGET, 7 b.fd_post AS fdPOST, 8 b.fd_put AS fdPUT, 9 b.fd_delete ASfdDELETE 10 FROM 11 t_usergroup AS A 12 INNER JOIN t_permission AS b ON A .fd_groupid = b.fd_groupid 13 INNER JOIN t_resource AS C ON b.fd_resid = C .fd_resid 14 INNER JOIN t_tenant AS d ON A .fd_tenantid = d.fd_tenantid 15 WHERE 16 d.fd_tenant_name = 'root' 17 and a.fd_groupid in (10026,10029) 18 19 ORDER BY c.fd_res_name
(2)合併多列,並對後四列的值做並集處理
當列fd.get的和>=1(至少有一個真),則返回1。
1 SELECT 2 C .fd_tenantid AS fdTenantId, 3 C .fd_resid AS fdResid, 4 C .fd_res_name AS fdResName, 5 C .fd_service AS fdService, 6 (CASE WHEN SUM(b.fd_get) >=1 THEN 1 ELSE 0 END) AS fdGET,7 (CASE WHEN SUM(b.fd_post) >=1 THEN 1 ELSE 0 END) AS fdPOST, 8 (CASE WHEN SUM(b.fd_put) >=1 THEN 1 ELSE 0 END) AS fdPUT, 9 (CASE WHEN SUM(b.fd_delete) >=1 THEN 1 ELSE 0 END) AS fdDELETE 10 FROM 11 t_usergroup AS A 12 INNER JOIN t_permission AS b ON A .fd_groupid = b.fd_groupid 13 INNER JOIN t_resource AS C ON b.fd_resid = C .fd_resid 14 INNER JOIN t_tenant AS d ON A .fd_tenantid = d.fd_tenantid 15 WHERE 16 d.fd_tenant_name = 'root' 17 and a.fd_groupid in (10026,10029) 18 19 GROUP BY 20 d.fd_tenantid,c.fd_resid,c.fd_service
21 22 ORDER BY c.fd_res_name
相關推薦
2017.7.14 使用case when和group by將多條資料合併成一行,並且根據某些列的合併值做條件判斷來生成最終值
1.效果演示 (1)不做處理 (2)合併多列,並對後四列的值做並集處理 2.SQL語句 (1)不做處理 1 SELECT 2 C .fd_tenantid AS fdTen
關於case when結合group by用時的寫法舉例
原表是個員工檔案,共583人,但case when結合group by用時,寫法不同,其出來的結果也不同 例1: select distinct a.Branch, case when kultur = '碩士' then sum(num) else '0' end as
jquery通過json從資料庫中返回一條資料和其對應的多條資料
最近在用jquery框架做專案,整個專案全部採用AJAX技術,用JSON做資料交換,下面的例子是一對多的關係,從資料庫中查出一條主資料,然後顯示這條主資料對應的多條其它資料,如下所示: json.jsp: <%@ page language="java" import="java.util.*" pa
case when 和 decode 的比較分析
fault sig cas 相等 from 圖片 簡潔 oracl oracle數據 一、case when 與 if - else 類似,語句如下:CASE expr WHEN expr1 THEN return_expr1 [WHEN expr2 THE
CASE...WHEN...和SUM()函式
按照身份證號前幾位確定屬於什麼地區,得出傳送旅客人員組成每個地區人數,以便做成餅狀圖 SELECT SUM(CASE WHEN SUBSTR(DW_CTKY_GFDPXX.ZJHM,1,4) = ‘3716’ THEN 1 ELSE 0 END)AS 濱州人, SUM(CAS
partition by和group by對比
今天大概弄懂了partition by和group by的區別聯絡。 1. group by是分組函式,partition by是分析函式(然後像sum()等是聚合函式); 2. 在執行順序上, 以下是常用sql關鍵字的優先順序 from > where > group by >
Sql distinct和group by的區別
distinct和Group by 區別: distinct只是將重複的行從結果中出去; group by是按指定的列分組,一般這時在select中會用到聚合函式。 distinct是把不同的記錄顯示出來。
mysql聯查中使用if和group by會讓你的結果不是你想要的
mysql中的if語句遇到統計count group by的時候會出現不準確的情況,原因是分組後if條件的結果以第一條為準,不會跟著分組 例如: SELECT SQL_NO_CACHE t1.*,t2.nick_name,t2.avatar,IF(t1.user_id=104080,
linq中order by 和group by (含lambda表示式實現)以及綜合案例
一、Linq對誰適用 linq的語法通過System.Linq下面的Enumerable類提供支援,也就是說,只要是實現了IEnumerable<T>的物件都可以使用Linq的語法來查詢。LINQ定義了大約40個查詢操作符,如select、from、in、where、group by 以及ord
ORACEL條件表示式 CASE WHEN 和DECODE
SELECT last_name, job_id, salary, DECODE(job_id, 'IT_PROG', 1.10*salary, 'ST_CLERK', 1.15*salary, 'SA_REP', 1.20*salary, salary) REVISED_SALARYFROM employe
tp5 去重查詢 distinct和group by
例子 $teachers_list=Db::name('class') ->alias('c') ->join('admin a','c.teachers_id = a.id') ->join('teachers t','a
SQL Union和SQL Union All兩者用法區別效率以及與order by 和 group by配合問題
SQL UNION 操作符 UNION 操作符用於合併兩個或多個 SELECT 語句的結果集。 請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的資料型別。同時,每條 SELECT 語句中的列的順序必須相同。 SQL UNION
distinct和group by 去掉重複資料分析
詳見:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp40 用distinct關鍵字只能過濾查詢欄位中所有記錄相同的(記錄集相同),而如果要指定一個欄位卻沒有效果,另外distinct關鍵字會排序 。 s
oracle中distinct和group by的區別
其實二者沒有什麼可比性,但是對於不包含聚集函式的GROUP BY操作來說,和DISTINCT操作是等價的。不過雖然二者的結果是一樣的,但是二者的執行計劃並不相同。 在Oracle9i中: SQL> SELECT * FROM V$VERSION; BANNER -------
SQL筆記四:order by 和group by
可能 出現 student sel 排序 字段 條件 count() class 1.order by 排序 使用場景:對查詢的數據結果做一個排序 語法:select 字段A,字段B,...,字段N from...order by 字段A asc(desc),字段Bas
關於distinct 和group by的去重邏輯淺析
在資料庫操作中,我們常常遇到需要將資料去重計數的工作。例如: 表A,列col A C A B C D A B 結果就是一共出現4個不同的字母A、B、C、D 即結果為4 大體上我們可以選擇count(distinct col)的方法和group+c
mysql分組並多行拼接--group_concat和group by的使用
– 建立表結構 DROP TABLE IF EXISTS exe; CREATE TABLE exe ( id int(3) NOT NULL, type int(3) default NULL, name varchar(10)
聚合函式和Group by
聚合函式: sql語言中一種特殊的函式:聚合函式,SUM, COUNT, MAX, MIN, AVG等。這些函式和其它函式的根本區別就是它們一般作用在多條記錄上。SELECT SUM(population) FROM COUNTRY 這裡的SUM作用在所有返回記錄的popu
ThinkPHP去重 distinct和group by
近期專案中,遇到資料表去重要求,對於ThinkPHP的去重有了更加準確的認識和體會。 兩種去重方式: $test_data = M('hot'); //例項化資料表 $data = $test_d
with as 和group by 代替 count distinct,提高效能
資料庫:postgresql 背景:使用distinct在對某張表某個欄位做去重統計的時候,發現有統計特別慢(30-40s),當前表大小是400w,distinct 後大概60w sql 很簡單(出於安全考慮,欄位和表名稱都做了替換): 原sql: select count