待查

本文介绍了一种SQL查询方法,用于统计特定班组下水、电及水电标识的层次总数。该查询通过子查询的方式实现,能够针对指定的班组类型进行精确统计。

查出一个水电标示为水电且节点类型为班组的层次下的水的层次个数,电的层次个数,水电的层次的个数
最后的结果是这样的:
select c1.mc, (select count(*) from c_zzcc c2 where c2.qxm like c1.qxm||'%') zong ,
              (select count(*) from  c_zzcc c3 where c3.qxm like c1.qxm||'%' and c3.sdbs = '水') shui,
              (select count(*) from  c_zzcc c3 where c3.qxm like c1.qxm||'%' and c3.sdbs = '电') dian ,
              (select count(*) from  c_zzcc c3 where c3.qxm like c1.qxm||'%' and c3.sdbs = '水电') shuidian
  from c_zzcc c1
  where
    c1.sdbs  = '水电'
    and c1.jdlx = '00141009102610109001'

反正我是没写出来. 这不是子查询吧. 待我查查

折半查找法(二分查找法)是一种在有序数组中查找特定元素的高效算法,其基本思想是将数组分成两部分,通过比较待查元素与中间元素的大小,缩小查找范围,直到找到目标元素或确定目标元素不存在。以下是不同实现方式的代码示例: ### 简单数组实现 ```c #include <stdio.h> // 折半查找法 int zheban(int a[], int n, int m) { int low = 0; int high = n - 1; int mid; while (low <= high) { mid = (low + high) / 2; if (a[mid] == m) return mid; // 找到,返回下标 else if (a[mid] < m) low = mid + 1; else high = mid - 1; } return -1; // 没有找到,返回 -1 } int main() { int n; scanf("%d", &n); int a[n]; // 输入 n 个有序的数 for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } int m; // 输入要查找的数 scanf("%d", &m); int k = zheban(a, n, m); if (k == -1) printf("没有找到"); else printf("%d", k); return 0; } ``` 此代码定义了`zheban`函数来实现折半查找,在`main`函数中读取有序数组和待查整数,调用`zheban`函数进行查找并输出结果[^1]。 ### 结构体实现 ```c #include <stdio.h> #include <stdlib.h> typedef struct { int *elem; int length; } SqList; int ZheBan(SqList s, SqList *s1, int k) { int low = 0, high = s.length - 1; int mid; s1->length = 0; while (low <= high) { mid = (low + high) / 2; s1->elem[s1->length++] = s.elem[mid]; if (s.elem[mid] < k) low = mid + 1; else if (s.elem[mid] > k) high = mid - 1; else return mid; } return -1; } int main() { SqList s, s1; int k; scanf("%d", &s.length); s.elem = (int *)malloc(100 * sizeof(int)); s1.elem = (int *)malloc(100 * sizeof(int)); for (int i = 0; i < s.length; i++) { scanf("%d", &s.elem[i]); getchar(); } scanf("%d", &k); if (ZheBan(s, &s1, k) != -1) printf("%d\n", ZheBan(s, &s1, k)); else printf("no\n"); for (int i = 0; i < s1.length - 1; i++) printf("%d,", s1.elem[i]); printf("%d", s1.elem[s1.length - 1]); return 0; } ``` 该代码使用结构体`SqList`来表示数组,`ZheBan`函数实现折半查找,`main`函数负责读取输入、调用查找函数并输出结果和查找过程中访问的元素[^2]。 ### 固定数组长度实现 ```c #include <stdio.h> int main() { int mid, da = 14, xiao = 0, i, x; int a[15]; for (i = 0; i < 15; i++) { scanf("%d", &a[i]); } scanf("%d", &x); mid = (da + xiao) / 2; while (a[mid] != x) { if (x < a[mid]) { da = mid - 1; mid = (da + xiao) / 2; } if (x > a[mid]) { xiao = mid + 1; mid = (da + xiao) / 2; } if (xiao > da) break; } if (a[mid] == x) { printf("%d\n", mid); } else printf("NO\n"); return 0; } ``` 此代码针对长度为 15 的固定数组,在`main`函数中直接实现折半查找逻辑,读取数组和待查整数,输出查找结果[^3]。 ### 另一种简单数组实现 ```c #include <stdio.h> #include <Windows.h> int main() { int arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int mid = 0; int left = 0; int right = sizeof arr / sizeof arr[0] - 1; int key = 7; while (left <= right) { mid = left + (right - left) / 2; // 计算中间下标(防止溢出) if (arr[mid] < key) { left = mid + 1; } else if (arr[mid] > key) { right = mid - 1; } else { printf("找到了:%d\n", mid); break; // 找到了返回下标 } } if (left > right) printf("-1\n"); // 找不到返回 -1 system("pause"); return 0; } ``` 该代码在`main`函数中对固定数组进行折半查找,查找目标为`key`,输出查找结果[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值