当前位置: 首页 > 编程日记 > 正文

mysql 行号_PQ获取TABLE的单一值作为条件查询MySQL返回数据

f8fe211860e5ab46f32767f7caeef49c.png

下午,我正爽歪歪地喝着咖啡,看着Power BI每秒钟刷新一次,静静等待某个分公司完成本月绩效任务,自动调用Python在钉钉群中发送喜报:

34eed827536381597e1baeb000018168.png

紧接着再次调用Python将Power BI云端报告中的各分公司最新完成率数据和柱状图截图发在群里:

4a77f2b22355dd37439d2e35cdf3dd0f.png

用的自然是下面这两篇文章的骚操作:

5503fb03fcf182e61b80d83b0ba71025.png

要说代码嘛,还是灰常简单滴:

91472cdbe1fb5c1d65b9a13b4b250047.png

当然,你可不要直接用啊,导入的库是本地生成的。详情请阅读以上两篇文章。

以上不是重点,说正事:

忽然,领导微信发来一张excel表,让我做一下简单分析,顺便发表一下看法。

领导安排活得赶紧的呀,放下咖啡,打开excel表-全选-插入表格-转换数据-powerquery

一顿操作猛如虎,分析了一下谁谁谁是二百五。

领导表示,说得对,就这么办。还有,把他上个月销售记录附在这张表后面,发我看看。

问题来了:这个时候如果是你,你会怎么完成这个任务?(前提,数据库中有所有人的全部记录。)

常规思路是,直接在数据库中查找这个人,按条件返回即可,只不过还得写一个导出到文件,然后打开文件复制到原来的表中,说实话还真有点繁琐。

PowerQuery能帮助我们很简便地解决这个问题。为简化模型,我们采用下面的数据来讲解:

d3a49aaab8bc5a2f4fa619b4f6efee94.png

比如我们要查询的人是moon,那么首先在powerquery编辑器中右键moon然后深化:

ce103713e467a4e89bd9d11578803b3a.png

这样就得到了显示的值:moon。注意这里的值是一个单纯的值,而不是一个一行一列的表。当然,如果你关闭并上载,的确会得到一张一行一列的表:

ce103713e467a4e89bd9d11578803b3a.png

由于我们并不想要这张表,而是想得到这个值,所以直接在这个查询后,将查询结果作为下一步查询的输入值。

得到了这个值,我们就可以调用MySQL去查询了:

let 源 = Excel.CurrentWorkbook(){[Name="表2"]}[Content], 更改的类型 = Table.TransformColumnTypes(源,{{"ID", Int64.Type}, {"NAME", type text}, {"销售额", Int64.Type}}), NAME = 更改的类型{1}[NAME], OUTPUT= MySQL.Database("localhost", "test1", [Query="select * from sheet1 WHERE销售员='"&NAME&"'"]) in OUTPUT

加载得到如下的返回表:

81cefb9cd33287043a2a591a0e988b70.png

关闭并上载,保存文件,发送领导即可。

d3779a86ead7e6382343df5462e5cd75.png

美滋滋,继续喝咖啡。

喝着喝着,我就开始琢磨这个查询了。

我按销售额从大到小的顺序排列,然后在查询结果表中点击右键刷新,发现:

ce103713e467a4e89bd9d11578803b3a.png

诶?出问题了吧,一看查询到的结果,全都是infi的记录,这是怎么回事呢?

我们到查询编辑器中看看:

266442b06585909fa7d56f988e959904.png

注意第三行:

NAME = 更改的类型{1}[NAME],

M语言允许我们通过坐标的方式获取表中单一的值,[NAME]代表NAME列,而{1}代表第2行,因为表都是从标号为0的行开始的。

而我们的原始表中,moon处于第2行:

8a715a17e74ed9e6cc69bbd567f118cb.png

而经过排序后的数据,第二行变成了infi:

e3ce1c3a02bbb522cd7e63f2127cef5c.png

因此,返回的查询一定也是infi的。

这样就有问题了,因为变动原始表,调整顺序,删除、增加行是经常会发生的事情,我不能每次去都修改moon所在的行吧?

主键的作用

我们知道,在关系型数据库SQL中,是存在主键的。那在Power Query中有没有可能设置主键呢?在UI上并没有设置的位置,但是我们还是可以想其他办法的,有这么几种方式:

1.从带有主键的数据库中导入数据

2.在pq中对table某一列去重,那么这一列就可以作为主键

3.使用Table.AddKey()函数对表操作

一旦设置主键,表中的每一个值就有了另外一种体现其坐标的方式。

我们对表的ID列进行去重(虽然其本身已经没有重复项,但这个操作必须得有),当做主键:

954e923210a63a06355790bb2d799ca0.png

同样,选中moon右键-深化:

46a7545a71cd7d23affdb65a036f17fa.png

此时我们再来看看查询编辑器:

0ab7967df750122867d997ca7e218414.png

注意这个时候的第四行:

NAME = 删除的副本{[ID=3322]}[NAME]

它不再是以行号作为条件去匹配,而是以主键的名。而这种方式,对比用行号的方式,优势在于不论如何插入数据和改变排序,取值只看主键,所以查询结果不会变。我们测试一下:

ce103713e467a4e89bd9d11578803b3a.png

不论怎么调整顺序,或者删除数据,只要表中还有moon,那么返回的结果都是不会变的。

3e94abaf037f92f16604893a4bb3d5e2.png

相关文章:

UUID的使用及其原理

今天敲项目要用UUID,想起之前老师告诉UUID的使用,但没说具体的生成逻辑,于是我进行了百度 首先,UUID的使用: //生成随机的UUID String uuid UUID.randomUUID().toString().replaceAll("-", "")…

链表类型题目需要用到的头文件list.h

下面是后面链表相关题目中需要用到的链表结点的定义和相关操作函数,参见下面的list.h文件: 注意链表结点的定义采用cpp的定义方式,它会被cpp的文件调用。比如后面删除链表重复结点的文件del_repeated_list.cpp中的编译方式: g -…

led计数电路实验报告_「正点原子FPGA连载」第八章 按键控制LED灯实验

1)实验平台:正点原子开拓者FPGA开发板2)本实例源码下载:请移步正点原子官网第八章 按键控制LED灯实验按键是常用的一种控制器件。生活中我们可以见到各种形式的按键,由于其结构简单,成本低廉等特点,在家电、数码产品、…

svn官方备份hot-backup.py强烈推荐

Author:牛班图 Date:2016/05/18 Address:suzhou --- centos 6.7默认安装的python是2.6.6,大家可以先查看一下自己操作系统的python版本,python -v; hot-backup.py是基于python2写的,python3的语法有些地方不一样,所以在…

用js方法做提交表单的校验

基础知识&#xff1a; 原始提交如下&#xff1a; <form action"<%basePath %>puser/register" method"post"><input placeholder"Name" name"realname"> <input type"email" placeholder"Email…

tree类型题目需要用到的头文件tree.h

下面是树类型题目需要用到的头文件tree.h,请包含在cpp文件中编译,而不是放在c文件中编译,比如查找树中两个节点的最低公共父结点的题common_parent_in_tree.cpp,编译它的方法是: g -g common_parent_in_tree.cpp -o common_parent_in_tree 下面是tree.h的内容: #include <…

用easyui动态创建一个对话框

function randomString(len) { len len || 32; var $chars ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678; /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/ var maxPos $chars.length; var pwd ; for (i 0; i < len; i) { pwd $…

网站收录工具(php导航自动收录源码)_网站如何快速收录,网站不收录怎么办?...

经常有朋友说怎么快速收录&#xff0c;网站不收录怎么收录&#xff1f;&#xff1f;其实&#xff0c;网站不包括一般的新网站数量&#xff0c;没有SEO基础&#xff0c;SEO了解合作伙伴经常会遇到问题&#xff0c;甚至很多人会告诉你&#xff0c;不包括网站引流&#xff0c;导致…

JS Uncaught SyntaxError:Unexpected identifier异常报错原因及其解决方法

最近在写ajax的时候&#xff0c;调用js方法&#xff0c;遇到了Uncaught SyntaxError:Unexpected identifier异常报错&#xff0c;开始搞不清原因&#xff0c;很苦恼。 以为是js方法参数个数和长度的问题&#xff0c;后来发现原来是这样~ 以下是 浏览器窗口的报错 以及 按钮处…

python 打印皮卡丘_Python到底是什么?学姐靠它拿了5个offer

你ZAO吗&#xff1f;最近陌陌发布了一款很有意思的产品——ZAO&#xff0c;这款AI换脸的产品刷爆朋友圈&#xff01;这款产品火爆到什么程度呢&#xff1f;正在使用ZAO的用户会发现&#xff0c;想要生成一段新的AI换脸视频&#xff0c;已经不是等待几秒、排队第几位的问题&…

有一个1亿结点的树,已知两个结点, 求它们的最低公共祖先!

对该问题,分为如下几种情形讨论: 情形一: 假如该树为二叉树,并且是二叉搜索树, 依据二叉搜索树是排过序的, 我们只需要从树的根结点开始,逐级往下,和两个输入的结点进行比较. 如果当前结点的值比两个结点的值都大,那么最低的公共祖先一定在当前结点的左子树中,下一步遍历当前…

数据库SQL优化大总结之百万级数据库优化方案

1.对查询进行优化&#xff0c;要尽量避免全表扫描&#xff0c;首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断&#xff0c;否则将导致引擎放弃使用索引而进行全表扫描&#xff0c;如&#xff1a; select id from t w…

js定时执行函数

方法一: //直接现定义函数 var time window.setInterval(function(){ $(’.lingdao_right’).click(); },5000); 方法二: //执行已经有的函数 var time window.setInterval(‘abc()’,5000); 清除js自动执行 clearInterval(time); //time就是定义时的名称&#xff0c;如上

BST(binary search tree)类型题目需要用到的头文件binary_tree.h

下面是二叉搜索树需要用到的头文件binary_tree.h #include <stdio.h>struct BinaryTreeNode{int value;BinaryTreeNode* pLeft;BinaryTreeNode* pRight; };BinaryTreeNode* CreateBinaryTreeNode(int value){BinaryTreeNode* pNode new BinaryTreeNode();pNode->valu…

终止js程序执行的方法

js终止程序执行的方法共有三种 (一)在function里面&#xff08;普通js方法&#xff09; &#xff08;1&#xff09;return; &#xff08;2&#xff09;return false; (二)非function方法里面&#xff08;如ajax方法&#xff09; alert(“发生异常”); throw SyntaxError(); ale…

将BST转换为有序的双向链表!

在二叉树中,每个结点都有两个指向子结点的指针. 在双向链表中, 每个结点也有两个指针,它们分别指向前一个结点和后一个结点.由于这两种结构的相似性, 同时二叉搜索树也是一种排过序的数据结构, 因此在理论上有可能实现二叉搜索树和排序的双向链表之间的转换. 下面的文件BST_to_…

计算机病毒实践汇总五:搭建虚拟网络环境

在尝试学习分析的过程中&#xff0c;判断结论不一定准确&#xff0c;只是一些我自己的思考和探索。敬请批评指正&#xff01; 涉及内容&#xff1a; INetSim安装及使用 ApateDNS安装及使用 1. 搭建病毒分析网络环境原因 使用虚拟机作为沙箱能把病毒与外界完全隔离开&#xff0c…

form表单提交前进行ajax或js验证,校验不通过不提交

在使用form表单进行提交数据前&#xff0c;需要进行数据的校验->表单的校验&#xff08;如&#xff1a;两次密码输入是否相同&#xff09;后台数据的校验&#xff08;如&#xff1a;账号是否存在&#xff09;&#xff0c;这个时候&#xff0c;如果哪步校验不通过&#xff0c…

中体骏彩C++面试题

下面是我凭记忆想到的几个题目,有需要的同学就拿去吧,我也算做了点善事. 中体骏彩C笔试题 2013-11-18 1.指针的含义是:B A.名字 B.地址 C.名称 D.符号 2.给出下面的程序输出: #include <iostream> #include <cstdlib> #include <cstring> #include <l…

Fibonacci数列的java实现

关于Fibonacci应该都比较熟悉&#xff0c;0,1,1,2,3.。。。。 基本公式为f(n) f(n-1) f(n-2); f(0) 0; f(1) 1; 方法1&#xff1a;可以运用迭代的方法实现&#xff1a; public static int f1(int n){if(n<1)return n;return f1(n-1) f1(n-2); }实现方法简单。 方法2&am…

stream流对象的理解及使用

我的理解&#xff1a;用stream流式处理数据&#xff0c;将数据用一个一个方法去 . &#xff08;点&#xff0c;即调用&#xff09; 得到新的数据结果&#xff0c;可以一步达成。 有多种方式生成 Stream Source&#xff1a; 从 Collection 和数组 Collection.stream()Collecti…

永成科技C++笔试题

最后几个题有点难度,在这里说一下: 永成科技C笔试题 2013-11-19 1.将1亿以内的质数存到一个超级大的数组中,用算法如何实现? 使用"筛法"求解1亿以内的质数的程序的思路: 先动态分配1亿个bit(总计12500000字节),用字节中的每一位代表每一个整数,首先将代表奇数的那…

事务库事务隔离级别

为了快速同步数据的需要&#xff0c;我分段执行了两次python脚本&#xff0c;即开启了两个进程同步数据&#xff0c;结果服务器不时报出数据库死锁异常&#xff0c;通过排查代码和数据库日志发现&#xff0c;是由长事务并发引起的。代码中有入账和出账两个方法&#xff0c;里面…

十大算法,描述+代码+演示+分析+改进(赶紧收藏!)

十大算法 1.冒泡排序 ​ &#xff08;1&#xff09;算法描述 ​ 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是…

webkit入门准备

《webkit入门准备》1. Ca) Webkit代码风格b) Inlinec) Constd) 构造与析构e) 重载f) 继承2. 泛式编程a) Vector/List/HashTableb) Iteratorc) 智能指针3. 面向对象编程a) 对象概念b) …

oracle操作

一、导入dmp文件&#xff1a; 1.创建表空间create tablespace 表空间 datafile 路径\文件名.dbf size 1500M autoextend on next 5M maxsize 3000M;注&#xff1a;路径必须为已创建2.创建用户create user 用户名 identified by 密码 default tablespace 表空间;3.更改用户的表空…

一个form表单,多个提交按钮(实现不同功能和地址的提交)

直接上代码 表单部分&#xff1a; <form action"" name"find" method"post" enctype"multipart/form-data"><input type"text" name"name"/><br/><button οnclick"f1()"/>找…

chrome 硬件渲染(GPU Accelerated Compositing in Chrome)

原文链接 http://www.chromium.org/developers/design-documents/gpu-accelerated-compositing-in-chrome chrome 中集成了webkit,这篇文章对webkit 硬件渲染过程有详细的介绍&#xff0c;很好。 简介 这篇文档讲解chrome硬件加速合成的实现细节和背景。 介绍 通常来讲&#…

CCS Font 知识整理总结

总是搞不懂 CCS 中如何正确的使用字体&#xff0c;这下明白了。 1、什么是 font-face font-face 顾名思义&#xff0c;就是文字的脸。字体是文字的外在形式&#xff0c;就是文字的风格&#xff0c;是文字的外衣。比如行书、楷书、草书&#xff0c;都是一种字体。同样一个字每个…

Maven安装与配置(最实用!!!)eclipse中配置maven

Maven安装与配置 一、需要准备的东西 JDKEclipse&#xff08;本章主要是在eclipse中进行配置maven&#xff09;Maven程序包 二、下载与安装 1. 前往maven下载最新版的Maven程序&#xff1a; 2. 将文件解压到D:\Program Files\Apache\maven目录下&#xff08;这样子放目录结…